我使用以下代码使用UIImageView
不断旋转CABasicAnimation
:
CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
fullRotation.fromValue = [NSNumber numberWithFloat:0];
fullRotation.toValue = [NSNumber numberWithFloat:M_PI * 2];
fullRotation.duration = 6;
fullRotation.repeatCount = HUGE_VAL;
[self.myImageView.layer addAnimation:fullRotation forKey:@"360"];
动画按预期方式工作,但是当我记录旋转角度时,它从
0
变为180
,然后从-180
变为0
。我希望它从0
到360
,然后再回到0
。我正在使用以下代码来获取旋转角度:
CGFloat radians = [[self.myImageView valueForKeyPath:@"layer.presentationLayer.transform.rotation.z"] floatValue];
CGFloat degrees = (radians * (180 / M_PI));
NSLog(@"ROTATION = %f", radians);
最佳答案
仅最多360度(或2 *π弧度)的倍数唯一确定旋转角度,例如-90和270度描述了完全相同的旋转。
[[self.myImageView valueForKeyPath:@"layer.presentationLayer.transform.rotation.z"] floatValue]
给出图像视图在特定时间点的旋转,并且该旋转
可以使用介于0和2 *π之间的角度(如您所期望的)或使用
在-π和π之间(实际上是这样)。
将任意角度归一化为
0 <= degrees < 360
范围你可以做
degrees = fmod(degrees, 360.0);
if (degrees < 0) degrees += 360.0;