【问题标题】:Is there an way to pause an Core Animation and resume it at some time later?有没有办法暂停核心动画并在稍后恢复它?
【发布时间】:2009-05-30 15:44:00
【问题描述】:

我有几个核心动画同时进行。它们都有一个上下文和一个动画 ID,其中上下文是正在动画的对象(UIImageView 对象)。我想暂停它们,让动画暂时停止,然后当一些事情完成后,恢复它以完成它。这些事情只发生在 UIScrollView 中非常快速的滚动运动上。我想通过停止所有正在进行的动画而不是使滚动视图滚动的动画来提高性能。我已经为该滚动视图实现了 contentOffset 的自定义动画。

【问题讨论】:

    标签: iphone cocoa-touch uikit core-animation


    【解决方案1】:

    您可以通过将动画速度设置为零来暂停图层动画,请参阅How to pause the animation of a layer tree

    【讨论】:

      【解决方案2】:

      对于任何来搜索的人,这是您暂停和恢复动画的方式:

      https://developer.apple.com/library/archive/qa/qa1673/_index.html

      【讨论】:

        【解决方案3】:

        我解决这个问题的唯一方法是以下。

        对于您希望停止动画的每个视图:

        将视图的框架设置为表示层

        从该视图中删除所有动画

        执行你的滚动

        重新计算动画

        向视图添加新动画

        我知道这不是你想听到的,但它并不像听起来那么糟糕。跟踪要停止的视图的一个好方法是给它们一个预定的标签。


        要删除动画:

        [myView.layer removeAllAnimations]

        [myView.layer removeAnimationForKey:@"theAnimationKey"]

        【讨论】:

        • 如何从视图中删除动画?
        • [myView.layer removeAllAnimations] 或 [myView.layer removeAnimationForKey:@"theAnimationKey"]
        • 这可能是一个愚蠢的问题,但是如何将视图的框架设置为表示层?我假设您不是在这里谈论视图的框架属性。
        • 如果需要设置view的frame到表示层,那么就说view.frame = view.layer.presentationLayer.frame
        【解决方案4】:

        Core Animation Programming Guide 有一个关于Customizing the Timing of an Animation 的部分,其中包括一个关于Pausing and Resuming Animations 的部分。

        【讨论】:

          猜你喜欢
          • 2016-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多