【问题标题】:iOS, Swift: animation controlled by gestureiOS、Swift:手势控制的动画
【发布时间】:2014-12-24 23:18:52
【问题描述】:

我试图找到一种将用户交互(平移手势)与动画联系起来的方法。我想通过拖动视图(或仅通过手指在屏幕上平移)来控制动画进度。

我想我可以通过使用 Core Animation 来做到这一点,但我没有找到任何与我的需求示例相似的地方。 我有一个CGPath,我想画它。 我知道有 strokeStartstrokeEnd 属性是可动画的,并且从“绘图”的角度来看完全可以满足我的需求。

使用具有给定path 属性的图层,我可以使用 CABasicAnimation 为这条路径设置动画

layer.path = myPath
//... layer configuration
let pathAnimation = CABasicAnimation(keyPath: "strokeEnd")
pathAnimation.duration = 2
pathAnimation.fromValue = 0
pathAnimation.toValue = 1
layer.addAnimation(pathAnimation, forKey: "strokeEndAnimation")

在这里我们可以看到从第一个路径点到最后一个路径的动画。

好的,但我需要用手势控制这个动画。 比方说,如果我们将手指在屏幕上向右平移,我们的路径动画会直接向前绘制(例如 strokeStart = 0 和 strokeEnd = 1),如果我们从右向左平移,我们将看到向后动画(例如倒带)(例如 strokeStart = 1 和 strokeEnd = 0)。

我知道,如何获取手势方向、translationInView、velocityInView,我想在更改状态下设置动画,而不是结束。 (UIGestureRecognizerState.Changed)

但由于这些麻烦,我不知道如何将手势控制与动画结合起来:

  • 动画的持续时间。 (我不知道手势会有多快或多慢)
  • 我需要如何实现动画,因为在更改状态下调用非常频繁

我看过 animateWithDuration:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:

但持续时间问题再次出现。

希望有人能帮助我,如果你误解了什么,问我,我会尽力澄清。

【问题讨论】:

    标签: ios animation swift core-animation uigesturerecognizer


    【解决方案1】:

    比方说,如果我们在屏幕上向右平移手指,我们的路径动画会直接向前绘制(例如 strokeStart = 0 和 strokeEnd = 1),如果我们从右向左平移,我们将看到向后动画(如倒带) (例如 strokeStart = 1 和 strokeEnd = 0)。

    如果我理解正确,解决方案是通过将层的 speed 设置为 0 来冻结动画,然后通过设置层的 timeOffset 来设置动画的“帧”。

    【讨论】:

    • 例如,参见我书中的这段代码,我在其中冻结了路径动画,然后允许用户使用滑块控制更改:github.com/mattneub/Programming-iOS-Book-Examples/blob/master/…
    • 感谢您的回复马特,我正在尝试实施您的解决方案。你的书做得很好。我不是第一次呼吁他们。
    • 顺便说一句,我认为您所说的内容实际上在 WWDC 2014 关于构建可中断和响应式应用程序的视频中有所说明。s
    • 我已经看过了,它非常接近但不能用于我的问题(或者我误解了什么)。你的答案和例子是我正在寻找的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多