使用 UINavigationController 滑动边缘时 CABasicAnimation 重置
Posted
技术标签:
【中文标题】使用 UINavigationController 滑动边缘时 CABasicAnimation 重置【英文标题】:CABasicAnimation resets when edge swiping with UINavigationController 【发布时间】:2015-11-08 18:32:47 【问题描述】:我在viewDidLoad
中运行了以下CABasicAnimation
,用于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
,我错过了什么?
【问题讨论】:
【参考方案1】:设置fillMode
和removedOnCompletion
的整个技巧是无稽之谈 - 这是一个糟糕的建议,它已经在很多答案中发挥作用,但它是完全错误的。动画是一回事。指南针层的实际变换是另一个。您已应用动画,但忘记设置transform
以匹配它。因此,当手势开始并从图层中移除动画时,指南针会以其实际旋转显示(并且变化显示为跳跃)。
【讨论】:
" 这是一个糟糕的建议,它已经在很多答案中发挥作用,但它是完全错误的。" +1000!如果这是教堂,我会说阿门! 什么意思?我需要在哪里设置转换? 我认为如果没有居高临下的第一句话,这个答案会更好。 @JohnGibb 我很好,继续把它拿出来。【参考方案2】:感谢上面的马特,我意识到我错过了以下行:
compass.transform = CGAffineTransformMakeRotation(-1*(((-windBearing+180) * M_PI) / 180));
【讨论】:
以上是关于使用 UINavigationController 滑动边缘时 CABasicAnimation 重置的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationcontroller 中未使用的视图会发生啥?
使用 push segue 时 UINavigationController 是不是强制
UINavigationController - 使用 UIBlurEffect 清除背景
一起使用 UITabBarController 和 UINavigationController