我正在尝试使用CGAffineTransformMakeRotation,我参考了Apple文档
以弧度表示的角度,此矩阵旋转坐标系轴.在iOS中,正值指定逆时针旋转,负值指定顺时针旋转.在OS X中,正值指定顺时针旋转,负值指定逆时针旋转.
所以,我传递参数90度,它应该逆时针旋转.
self.myView是灰色背景色视图,红色方块视图仅用于查看旋转方向
#define DEGREES_TO_RADIANS(x) (x * M_PI/180.0)
CGAffineTransform rotation = CGAffineTransformMakeRotation( DEGREES_TO_RADIANS(90) );
[self.myView setTransform:rotation];
Run Code Online (Sandbox Code Playgroud)
但为什么它顺时针旋转?
我正在尝试使用模拟器和设备都有相同的结果,顺时针旋转
然后tring使用动画:
#define DEGREES_TO_RADIANS(x) (x * M_PI/180.0)
CGAffineTransform rotation = CGAffineTransformMakeRotation( DEGREES_TO_RADIANS(90) );
[UIView animateWithDuration:0.5
animations:^{
self.myView.transform = rotation;
}
completion:^(BOOL finished) {
NSLog(@"%@", NSStringFromCGAffineTransform(self.myView.transform));
}];
Run Code Online (Sandbox Code Playgroud)
它具有相同的结果,顺时针旋转.
有人可以解释原因,谢谢你的回复.
根据文档rotated(by:):
\n\n\n角度
\n\n仿射变换旋转的角度(以弧度为单位)。在 iOS 中,正值指定逆时针旋转,负值指定顺时针旋转。
\n
这引起了很多混乱,并已部分得到解答,但即使我们接受坐标系被翻转(并且只是执行与文档所述相反的操作),它在动画时仍然提供不一致的结果。
\n\n旋转方向(顺时针或逆时针)取决于目标旋转与当前旋转的接近程度:
\n\n<= 180\xc2\xba顺时针动画> 180\xc2\xba逆时针动画使用UIView.animate或UIViewPropertyAnimator显示不一致:
// Animates CLOCKWISE\nUIView.animate(withDuration: 2.0) {\n let radians = Angle(179).radians // 3.12413936106985\n view.transform = view.transform.rotated(by: CGFloat(radians))\n}\n// Animates COUNTER-CLOCKWISE\nUIViewPropertyAnimator(duration: 2, curve: .linear) {\n let radians = Angle(181).radians // 3.15904594610974\n view.transform = view.transform.rotated(by: CGFloat(radians))\n}\n// Does not animate\nUIViewPropertyAnimator(duration: 2, curve: .linear) {\n let radians = Angle(360).radians // 6.28318530717959\n …Run Code Online (Sandbox Code Playgroud)