所以我正在制作一个简单的琐事游戏,我有一个随着时间的推移而缩小的timerView。当用户选择答案时,它需要立即停止收缩 - 它必须非常敏感。我给每个问题用户10秒钟。最初我会动画10次(持续时间为1.0f),在上一个动画的完成块中调用动画的下一个“片段”。在完成块中,我会检查用户是否已点击答案,如果是,我不会继续链。该解决方案工作正常,但它不是非常敏感,因为它是基于每秒 - 用户在第二段的开头点击一个答案,并且该栏有明显的延续。
我解决这个问题的方法是让1000个动画调用持续时间为0.01f。在这之后,响应性就在点上 - 一旦我点击一个答案,视图就会停止动画 - 但问题是它实际上不是10秒,而是需要20秒。
问题1:animateWithDuration可以实际处理的最小时间间隔是什么?
问题2:有没有更好的方法来完成我想要完成的任务?
答案 0 :(得分:0)
回答问题二:是的肯定有更好的方法,看看CADisplayLink
使用它来缩小每一帧的视图,并在需要时结束显示链接
答案 1 :(得分:0)
最敏感的方式是:用户点击答案,您在触摸回调中做出响应,删除动画。您可以按CALayer
的{{1}}方法
答案 2 :(得分:0)
另一种方法是使用具有线性计时的单个动画将视图设置为收缩,然后将视图图层的速度设置为0以暂停动画。当您将图层上的速度设置为0时,动画会立即暂停。
这很有效,因为UIView动画实际上是在视图的图层上创建和安装CAAnimation对象。可以暂停和继续飞行中的UIView动画,就像CAAnimation一样。
我在github上有一个名为KeyframeViewAnimations(链接)的项目,允许您使用滑块来回暂停,继续或“擦除”UIView和CAAnimations。你可以使用这种技术。棘手的一点是要弄清楚动画的距离。