使用UINavigationController进行边缘滑动时,CABasicAnimation会重置

时间:2015-11-08 18:32:47

标签: ios uinavigationcontroller core-animation cabasicanimation caanimation

我在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,我缺少什么?

2 个答案:

答案 0 :(得分:4)

设置fillModeremovedOnCompletion的整个技巧都是废话 - 这是一个糟糕的建议,它已经成为很多答案,但这是完全错误的。动画是一回事;罗盘层的实际变换是另一个。您已应用动画但忘记设置transform 以匹配它。因此,当手势开始并且从图层中移除动画时,指南针将以其实际旋转显示(并且更改显示为跳转)。

答案 1 :(得分:1)

感谢上面的matt,我意识到我错过了以下几行:

compass.transform = CGAffineTransformMakeRotation(-1*(((-windBearing+180) * M_PI) / 180));