使用transform与image结合,在图片不进行偏移的情况下没问题,一旦图片偏移了,其旋转基于的圆心点就会计算错误(应该说还在原来的位置)
dafeizhu opened this issue · comments
new Painter(uni.createCanvasContext('canvas-transform-rotate')).draw({
type: 'transform',
content: {
type: 'image',
left: 100,
top: 0,
width: 90,
height: 90,
src: 'https://ask.dcloud.net.cn/account/identicon/68a13e9b37dcb8153bf6517414de8d91.png'
},
transform: [
{ type: 'rotate', rotate: 0 } // 90
// { type: 'translate', x: 0, y: 0 }
]
})
示例代码如上,这个时候,图片向右位移了100rpx,位置正确,理论上transform基于的圆心也应该位移,这个时候如果做rotate,其旋转会以原圆心,也即是基于(90rpx/2,90rpx/2)去做旋转。
示例图如下:
期望情况,图片位移时,图片的圆心能够跟着图片的偏移量移动,或者说有可其他方案能够达成此目的?
我看你的代码中是先 rotate
再 translate
的,这样的话你示例图中没有标记正常位置那一个就是正确的
在 transform
中,先 rotate
时,会改变变换本身的坐标轴,也就是说原本的“右”,旋转之后变为了“下”,
第二步向右 translate
变为了向下translate
。这与 CSS 中的 transform 表现一致。
如果想要将图片移动到示例图中正常位置并顺时针旋转 90 度,可以用如下变换:
方法一:
1. translate x: 100
2. rotate 90
方法二:
1. rotate 90
2. translate y: -100
我看你的代码中是先
rotate
再translate
的,这样的话你示例图中没有标记正常位置那一个就是正确的
在transform
中,先rotate
时,会改变变换本身的坐标轴,从而原本的“右”,旋转之后变为了“下”,
第二步向右translate
变为了向下translate
。这与CSS中的变换表现一致。如果想要将图片移动到示例图中正常位置并顺时针旋转90度,可以用如下变换:
方法一:
1. translate x: 100 2. rotate 90
方法二:
1. rotate 90 2. translate y: -100
作者你好,你说的这个方法,就是先translate后rotate,可实际上通过参数一次性传入的话,并没有先后之分,可能你的意思是在外再嵌套一层type:transform然后使用translate。
我这边已经试出了解决方案,其实也就是最外层嵌套一层type:container,然后通过这层做位移;里面再使用type:transform,来做相关的rotate和scale。
谢谢你的解答!