iOS-如何制作动画轨迹

iOS-如何制作动画轨迹,ios,core-animation,Ios,Core Animation,实现跟踪触摸的平滑反转动画的最佳方法是什么?我指的是那些动画,例如,如果用户执行一个滑动手势,一些元素在屏幕上平滑地移动,而其他元素则关闭,但如果用户缓慢地来回拖动平移手势,相同的对象将根据触摸位置以百分比的形式向前/向后移动。这在许多应用介绍和过渡中都可以看到。我找到了 一个教程讨论了这方面的内置功能,但它只在视图-控制器转换之间进行,没有提供我在许多应用程序中看到的完整粒度控制() Jazzhands,这是IFTTT的一个工具包,但这是一个打包的解决方案,可能不包括如何在较低级别上最好地实

实现跟踪触摸的平滑反转动画的最佳方法是什么?我指的是那些动画,例如,如果用户执行一个滑动手势,一些元素在屏幕上平滑地移动,而其他元素则关闭,但如果用户缓慢地来回拖动平移手势,相同的对象将根据触摸位置以百分比的形式向前/向后移动。这在许多应用介绍和过渡中都可以看到。我找到了

  • 一个教程讨论了这方面的内置功能,但它只在视图-控制器转换之间进行,没有提供我在许多应用程序中看到的完整粒度控制()
  • Jazzhands,这是IFTTT的一个工具包,但这是一个打包的解决方案,可能不包括如何在较低级别上最好地实现该解决方案()
  • 这里有一个问题,其中一个答案显示了在手势结束后如何执行动画()
我不明白的是——我很习惯使用动画和手势——东西是如何既能动画化又能互动的

通常,当我创建动画时,我会提交动画,并从开始到结束。虽然我可以在触摸继续时中断动画,但这看起来像是在踩高跷

另一方面,根据用户输入移动对象很容易,但这不是动画

如果某些东西可以根据动画进行更改,但同样的动画也与触控相关,并且仍然具有触控效果,则如何实现效果,从而使动画达到完成状态,但除非用户释放触控,否则不会真正“完成”(变得不可逆转),而在交互过程中的任何时候,如果用户释放平移,则动画要么向后恢复到其起始位置,要么根据最后一次触摸的位置和速度设置动画以完成。这些要求令人费解

我看到的这项技术的一瞥都涉及到关键帧动画,但我不明白的是,触摸事件在哪里与动画相交,以创建我看到的这些平滑效果

欢迎提供任何提示、示例或教程

我不明白的是——我很习惯使用动画和手势——东西是如何既生动又互动的

这是因为,设置动画后,您可以将该动画设置为您希望的任何“帧”。因此,可以根据手势的移动跟踪动画

其工作方式是,动画是渲染树的一个功能,属于CALayer。CALayer实现了CAMediaTiming协议。因此,CALayer的
时间偏移量
决定了该层显示的动画的“帧”。如果一个复杂的动画涉及许多不同的层,没有问题;只需设置它们相互超层的
时间偏移量
,即可控制整个动画的帧

事实上,这正是新的iOS 7交互式自定义转换功能的工作原理(您在问题中正确地提到了这一点)。例如,在此示例代码中:

。。。我不断更新UIPercentDrivenTerractiveTransition,告诉它用户通过手势的距离,因此动画会跟踪手势。现在问问自己:这到底是怎么可能的

当然,UIPercentDrivenInteractiveTransition在幕后不断调整层的
时间偏移量
,以在相应帧上描绘动画。(实际上,您可以将日志代码添加到我的示例中,以验证这一点。)


此外,当我在一个不完整的点结束手势时,动画要么急速结束,要么向后运行到其开始处-同样,这是因为CAMediaTiming协议,它允许您更改动画的
速度
,包含一个负值以向后运行。

这个问题及其答案可能会对您有所帮助。你可以定义一个动画,并通过改变一个符合CAMediaTiming的对象的时间偏移属性,沿着一条路径移动动画。这是一个关于这个主题的非常好的教程:一旦你了解了这一点——一旦硬币掉了,可以说——一个全新的世界打开了。看看苹果公司的技术说明:这个教程就是钱。我不敢相信这比我想象的要简单得多。我从来没有想过用这种方式使用timeOffset+速度属性,但现在它是如此的明显和辉煌。我觉得我在我的应用程序中做了一些非常酷的事情,但是使用这种技术的应用程序总是感觉非常平滑,并且可以很好地与之交互。我等不及要掌握它了。非常感谢你,马特。