【问题标题】:CABasicAnimation speed -- Keeping up with user inputCABasicAnimation 速度——跟上用户输入
【发布时间】:2013-06-08 18:08:58
【问题描述】:

更新:在使用触摸时,它真的就像不为 UI 元素设置动画一样简单。它现在完美地跟随触摸,没有滞后。

我目前正在尝试通过在 UIView 子类中实现 CALayer 子类来实现 UI 功能。我在自定义 UIVIew 的相应视图控制器中接收到触摸事件,通知 UIView 触摸,然后通知 CALayer 以便为在图层中绘制的 UI 元素设置动画。

一切正常,但我注意到当运动有很大的增量时(如快速滚动手指时),CABasicAnimation 会滞后。理想情况下,我希望动画与用户的手指完美对齐。

我想出了一个 hacky 方法,可以将动画的速度设置为任意高

anim.speed = 10.0f;

这基本上跟上了用户的手指,但我觉得这是一个完全的 hack,而不是一个可交付的解决方案。为了解决这个问题,我是否应该人为地限制处理多少触摸事件?是否应该对我不知道的动画速度/持续时间进行某种计算?

感谢您对此的任何帮助!

【问题讨论】:

  • 在我发布这个之后,我实际上有相同的想法来关闭动画,除了你提到的快照动画。听起来很有希望;我会在实施后发回这里,并让您知道它是否解决了滞​​后问题。感谢您的回复!

标签: ios core-graphics calayer cabasicanimation


【解决方案1】:

在连续手势期间,不应为动作设置动画,而应直接移动到手势的位置。当手势完成时,如果您希望它固定在其他位置,则为最终的、手势后的目的地设置动画。但不要在手势本身期间设置动画。


在极少数情况下,单个帧的渲染速度非常慢,但仍可能会出现延迟。显然,应该优化draw(_:) 进程以使其不慢(或拍摄快照并为快照视图而不是复杂视图设置动画)。但在手势过程中,您还可以使用“预测触摸”,即操作系统估计用户手势在未来的位置。例如,您可以实现touchesMoved(_:with:),然后调用predictedTouches(for:)。通过将视图移动到预测的触摸位置,可以减少感知延迟。

【讨论】:

    猜你喜欢
    • 2015-02-13
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多