Fir*_*ule 4 objective-c rotation cgaffinetransform ios
我正在尝试在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];
Run Code Online (Sandbox Code Playgroud)
现在假设我将M_PI更改为3.141593,这是我打印时M_PI包含的值.现在,当我按下按钮时,它完全正常.两次,它都会逆时针旋转180度.当我将它改为-3.141593时,它也会完全正常工作,顺时针:
self.transform = CGAffineTransformRotate(self.transform, 3.141593); //Works
Run Code Online (Sandbox Code Playgroud)
当我更多地玩它时,行为变得更加奇怪.
假设我想旋转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);
Run Code Online (Sandbox Code Playgroud)
如果我想旋转超过180度(PI)的任何东西,即使我指定正或负旋转,行为也只是旋转最短路线.当我旋转360度(2PI)时,它甚至不会旋转.
为什么会发生这些事情,我该怎么做才能使它更加一致?我的第二个问题是如何旋转270度和360度的东西.
Fel*_*lix 11
问题是使用animateWithDuration时无法真正控制旋转方向.它总是采用最短的路线.当旋转180度时,行为是不确定的,因为理论上最短路线有两种可能性.这也解释了为什么你不能旋转180度以上.如果您想要更多地控制动画或执行更复杂的动画,请使用CAKeyframeAnimation.
| 归档时间: |
|
| 查看次数: |
5694 次 |
| 最近记录: |