【问题标题】:Layer animations removed when switching apps切换应用时移除图层动画
【发布时间】:2012-02-15 13:39:27
【问题描述】:

(iOS 5.0)

我有一个 CAKeyframeAnimation 添加到具有无限重复计数的视图层(光标闪烁)。但是,当切换应用程序并返回时,动画会从图层中删除(或者可能整个图层都被替换了,我不确定)。

我尝试在 viewDidLoad 和 viewWillAppear 上重新添加它们,但在切换应用程序时都没有调用它们。我确实发现 UIApplicationDelegate 中有一个 applicationWillEnterForeground: 方法。我打算使用它,但我有两个问题:

  • 是否还有其他情况会触发动画或图层被卸载?有更合适的活动来听吗?
  • 响应这些事件(例如使用目标操作)的最佳做法是什么(从设计模式的意义上说)?

【问题讨论】:

    标签: objective-c core-animation


    【解决方案1】:

    切换app或view controller时,系统会让layer上的动画停止(完成),所以你可以将removedOnCompletion设置为NO(默认为YES),就可以了。

    【讨论】:

      【解决方案2】:

      当应用再次回到前台时,您必须再次将动画添加到CALayer,这是正确的。

      您需要在收到applicationWillResignActive 回调时删除它们。如果需要,您可以检查presentationLayer 以获取当前呈现的 - 或接近 - 屏幕属性。

      然后,当您的应用根据applicationDidBecomeActive 回调再次激活时,重新添加动画。

      由于多种原因,您的应用可能会从活动状态变为非活动状态,例如接听电话、短信、闹钟、用户按home键等

      看看我对这个问题的回答,其中我介绍了恢复 CAAnimation 的一些问题:

      Restoring animation where it left off when app resumes from background

      【讨论】:

      • 谢谢。对于任何感兴趣的人,我决定将此事件从应用程序委托传递给需要使用 NSNotificationCenter 重新添加动画的控制器。
      猜你喜欢
      • 1970-01-01
      • 2011-12-15
      • 2016-12-04
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      相关资源
      最近更新 更多