iOS - UIView 动画的限制?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于iOS - UIView 动画的限制?的主要内容,如果未能解决你的问题,请参考以下文章

ios 动画学习(-)UIView 自带动画

iOS开发UI篇—核心动画(UIView封装动画)

ios uiview封装动画(摘录)

iOS动画:UIView动画和CALayer动画(CABasicAnimationCAKeyframeAnimation的使用)

iOS开发UI篇—核心动画(UIView封装动画)

ios之UIview动画