【问题标题】:Infinite CABasicAnimation stops无限 CABasicAnimation 停止
【发布时间】:2012-11-10 04:03:06
【问题描述】:

我的 UIView 中有一个无限动画(旋转图像,输入:CABasicAnimation

animation.repeatCount = HUGE_VALF;

当我推送一个新的 ViewController 并返回到包含 View 动画的初始 ViewController 时,旋转停止了。

即使我在调用 ViewController 的 viewWillAppear 方法时再次设置动画,它也不会再次旋转。

我做错了什么?

【问题讨论】:

  • 我不明白 Xcode 与此有什么关系。
  • 你是对的。我删除了 xcode 标签。
  • 谢谢。对于一般 iOS 编程问题,请随意使用“ios”和“cocoa-touch”标签。
  • 我会记住这一点的。谢谢! :)

标签: ios uiview calayer cabasicanimation


【解决方案1】:

其实有一个简单的方法可以解决这个问题
将您的动画设置为:

Swift 3 版本

animation.removedOnCompletion = false

Swift 4 版本

animation.isRemovedOnCompletion = false

当 NavigationController 被推送到另一个 ViewController 的视图时,该层本身不会被破坏,因为 UINavigationController 获得了viewControllers 属性,它将保留原始 viewController 以及它的视图和您的动画层。

即使您将其 repeatCount 设置为无限,当视图从界面中移除时,该 CABasicAnimation 对象也会被破坏。所以将isRemovedOnCompletion 设置为 false 以保留它。

【讨论】:

  • 是的。我的动画在 iOS8 上运行良好,但 iOS9 需要此设置。
  • 这条线节省了我本可以浪费的时间。
  • 我也有类似的问题。我的脉动视图位于UICollectionView 内部,当我重新加载collectionView 时,动画停止。知道从哪里开始搜索吗?
  • 嗯,这是一个很好的提示,但确实对 UITableView 的情况没有帮助:/
  • 另一个提示:将 isRemovedOnCompletion 设置为 false 并没有解决我的问题。在我的例子中,我没有将新的 VC 推送到导航堆栈中,而是以模态方式呈现了另一个 VC。我编写了一个自定义 CALayer 子类来处理动画(使用 PaintCode 生成的代码)。在 CALayer 子类中覆盖 removeAllAnimations + 将动画 isRemovedOnCompletion 属性设置为 false 最终解决了问题。
【解决方案2】:

当一个层从屏幕上移除时,它会失去它的动画。一旦图层再次出现在屏幕上,您需要重新添加它们。

viewWillAppear: 太早了,因为那个时候图层实际上还没有出现在屏幕上。尝试在viewDidAppear: 中添加动画。

【讨论】:

  • 我以为我已经尝试过viewDidAppear,但似乎我没有。非常感谢! :)
  • 在应用程序进入后台模式并返回后,我确实在 viewDidAppear 中尝试过,它甚至没有被调用!
  • 尝试观察UIApplicationDidBecomeActive 通知并在那里重新添加您的动画。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多