我正在尝试在 Objective-C 中进行简单的旋转,但马上就有几个问题。一件事是我从CGAffineTransformRotate得到的不一致以及在该函数内部使用时 M_PI 是如何不一致的。
假设我这样做,并将其附加到按钮上。当我按下它一次它会逆时针旋转 180 度(很好并且遵循文档)但是当我再次按下它时,它会顺时针旋转 180 度,即使该值不是负数。将 M_PI 更改为 -M_PI 执行完全相同的操作,而旋转没有差异:
[UIView animateWithDuration:secs delay:0.0 options:option
animations:^{
self.transform = CGAffineTransformRotate(self.transform, M_PI); //Inconsistent
} completion:nil];
现在假设我将 M_PI 更改为 3.141593,这是我打印时 M_PI 包含的值。现在,当我按下按钮时,它完全可以正常工作。两次,它都会逆时针旋转 180 度。当我将其更改为 -3.141593 时,它也会完全正常工作,顺时针方向:
self.transform = CGAffineTransformRotate(self.transform, 3.141593); //Works
当我更多地玩它时,行为变得更加奇怪。
假设我想旋转 90 度 (pi/2)。M_PI 现在具有与使用值相同的行为,但旋转与应有的相反:
//Should be Clockwise but rotates CounterClockwise
self.transform = CGAffineTransformRotate(self.transform, -M_PI/2);
self.transform = CGAffineTransformRotate(self.transform, -1.5707965);
//Should be CounterClockwise but rotates Clockwise
self.transform = CGAffineTransformRotate(self.transform, M_PI/2);
self.transform = CGAffineTransformRotate(self.transform, 1.5707965);
如果我想旋转任何超过 180 度 (PI) 的东西,即使我指定了正旋转或负旋转,行为也只是旋转最短路径。当我旋转 360 度 (2PI) 时,它甚至不旋转。
为什么会发生这些事情,我该怎么做才能使其更加一致?我的第二个问题是如何将事物旋转 270 度和 360 度。