我在CABasicAnimation
中为viewDidLoad
内的视图控制器运行了以下UINavigationController
:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.duration = 1;
animation.additive = NO;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
animation.fromValue = [NSNumber numberWithFloat:0];
animation.toValue = [NSNumber numberWithFloat:-1*(((-windBearing+180) * M_PI) / 180)];
[compass.layer addAnimation:animation forKey:@"90rotation"];
当我使用边缘滑动手势慢慢导航回来时,动画会重置为初始状态,这非常不稳定。我设置了fillMode
并将removedOnCompletion
设置为NO
,我缺少什么?
答案 0 :(得分:4)
设置fillMode
和removedOnCompletion
的整个技巧都是废话 - 这是一个糟糕的建议,它已经成为很多答案,但这是完全错误的。动画是一回事;罗盘层的实际变换是另一个。您已应用动画但忘记设置transform
以匹配它。因此,当手势开始并且从图层中移除动画时,指南针将以其实际旋转显示(并且更改显示为跳转)。
答案 1 :(得分:1)
感谢上面的matt,我意识到我错过了以下几行:
compass.transform = CGAffineTransformMakeRotation(-1*(((-windBearing+180) * M_PI) / 180));