Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS,Swift:由手势控制的动画_Ios_Animation_Swift_Core Animation_Uigesturerecognizer - Fatal编程技术网

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

iOS,Swift:由手势控制的动画,ios,animation,swift,core-animation,uigesturerecognizer,Ios,Animation,Swift,Core Animation,Uigesturerecognizer,我试图找到一种将用户交互(平移手势)与动画连接起来的方法。我想通过拖动视图(或仅通过手指在屏幕上平移)来控制动画进度 我想我可以通过使用核心动画来实现这一点,但我没有发现任何与我的需求示例类似的东西。 我想画一个CGPath。 我知道有strokeStart和strokeEnd属性可以设置动画,并且从“绘图”的角度来看完全可以满足我的需要 使用具有给定路径属性的图层,我可以使用CABasicAnimation设置此路径的动画 layer.path = myPath //... layer con

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

我想我可以通过使用核心动画来实现这一点,但我没有发现任何与我的需求示例类似的东西。 我想画一个
CGPath
。 我知道有
strokeStart
strokeEnd
属性可以设置动画,并且从“绘图”的角度来看完全可以满足我的需要

使用具有给定
路径
属性的图层,我可以使用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),如果我们从右向左平移,我们将看到向后的动画(例如rewind)(例如strokeStart=1和strokeEnd=0)

我知道,如何获得手势方向,平移视图,速度视图,我想在改变的状态下设置动画,而不是结束。(
UIgestureRecognitizerState.Changed

但我不知道如何将手势控制与动画控制相结合,因为存在以下问题:

  • 动画的持续时间。(我不知道这个手势会有多快或多慢)
  • 我需要如何实现动画,因为在更改状态下调用非常频繁
我期待着
animateWithDuration:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:

但持续时间问题再次出现

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

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


如果我理解正确,解决方案是通过将层的
速度设置为0来冻结动画,然后通过设置层的
时间偏移来设置动画的“帧”

例如,请参见我书中的此代码,在这里,我冻结了一个路径动画,然后允许用户使用滑块控制更改:感谢您的响应,matt,我正在尝试实现您的解决方案。你的书做得很好。我不是第一次向他们呼吁。顺便说一句,我认为你正在谈论的事情实际上已经在WWDC 2014视频中展示了,关于构建可中断和响应应用程序。我已经看过了,非常接近,但不能用于我的问题(或者我被误解了)。你的答案和例子就是我想要的。谢谢