iOS,Swift:由手势控制的动画

时间:2014-12-24 23:18:52

标签: ios animation swift core-animation uigesturerecognizer

我试图找到一种方法来连接用户交互(平移手势)和动画。我想通过拖动视图来控制动画进度(或者只是通过屏幕上的手指平移)。

我想我可以通过使用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:

但持续时间问题再次上升。

希望有人可以帮助我,问我是否误解了某些事情,我会尽力澄清。

1 个答案:

答案 0 :(得分:2)

  

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

如果我理解正确,解决方案是通过将图层speed设置为0然后设置"框架"来冻结动画。通过设置图层timeOffset

来设置动画