【问题标题】:iOS - limit on UIView animate?iOS - UIView 动画的限制?
【发布时间】:2015-03-18 01:53:51
【问题描述】:

所以我正在制作一个简单的琐事游戏,并且我有一个随着时间流逝而缩小的 timerView。当用户选择一个答案时,它需要立即停止收缩——它必须非常敏感。我给用户每个问题 10 秒的时间。最初我会制作 10 次动画(持续时间为 1.0f),在前一个动画的完成块中调用下一个动画“片段”。在完成块中,我会检查用户是否点击了答案,如果是,我不继续链。该解决方案运行良好,只是响应速度不是很快,因为它是按秒计算的——用户在第二段的开头点击一个答案,并且该条有明显的延续。

我对这个问题的解决方案是改为有 1000 个动画调用,持续时间为 0.01f。完成此操作后,响应能力就很明显了——只要我点击一个答案,视图就会停止动画——但问题是它实际上并不是 10 秒,它需要 20 秒左右。

那么问题 1:animateWithDuration 实际上可以正确处理的最小时间间隔是多少?

问题 2:有没有更好的方法来完成我想做的事情?

【问题讨论】:

    标签: ios objective-c animation uiview uiviewanimation


    【解决方案1】:

    回答问题二:是的,肯定有更好的方法,看看CADisplayLink

    使用它在每一帧缩小一点你的视图,并在你需要时结束显示链接

    【讨论】:

      【解决方案2】:

      最响应的方式是:用户点击一个答案,你在触摸回调中响应,移除动画。你可以通过CALayerremoveAllAnimations方法移除动画

      【讨论】:

        【解决方案3】:

        另一种方法是使用具有线性时序的单个动画将视图设置为缩小,然后将视图层的速度设置为 0 以暂停动画。当您将图层上的速度设置为 0 时,动画会立即暂停。

        这是可行的,因为在幕后,UIView 动画实际上会在视图层上创建并安装 CAAnimation 对象。可以像 CAAnimation 一样暂停和继续进行中的 UIView 动画。

        我在 github 上有一个名为 KeyframeViewAnimations(链接)的项目,它允许您使用滑块来回暂停、继续或“擦洗”UIView 和 CAAnimations。你可以使用这种技术。棘手的一点是要弄清楚动画有多远。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-08
          • 1970-01-01
          相关资源
          最近更新 更多