iOS - 如何制作动画轨迹

时间:2014-03-27 02:33:14

标签: ios core-animation

实现跟踪触摸的平滑倒车动画的最佳方法是什么?我指的是这些动画,例如,如果用户执行滑动手势,某些元素在屏幕上平滑地生成动画,而其他元素则关闭,如果用户反而慢慢拖动平移手势来回相同的物体将根据触摸位置以百分比向前/向后移动。这可以在许多应用程序介绍中看到,也可以在转换中看到。我找到了

我没有掌握 - 而且我很乐意使用CAAnimations和手势 - 是什么东西可以同时动画 交互式

通常,当我创建动画时,我会提交动画并从头到尾进行动画制作。虽然我可以在触摸继续的时候中断动画,但这似乎是笨拙的。

另一方面,响应用户输入的移动很容易,但这不是动画。

如果某些内容可以根据动画发生变化,效果如何,但是也可以将完全相同的动画与触摸相关联,但仍然拥有它以便尽管动画达到完成不会真正“完成”(变得不可逆转),除非用户释放触摸,而在交互过程中的任何时刻如果用户释放平移,则动画要么向后恢复到其起始位置,要么动画完成,具体取决于最后的触摸位置和速度。这些要求令人费解。

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

欢迎任何提示,示例或教程。

1 个答案:

答案 0 :(得分:14)

  

我无法掌握的 - 我能够轻松使用CAAnimations和手势 - 是一种动画和互动的方式。

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

这种方式的工作方式是动画是渲染树的一个特征,属于CALayer。 CALayer实现CAMediaTiming协议。因此,CALayer的timeOffset确定了什么"框架"图层显示的动画。如果一个复杂的动画涉及许多不同的层,没有问题;只需设置其共同超级层的timeOffset,即可控制整个动画的帧。

实际上,这正是新的iOS 7交互式自定义转换功能的工作方式(您在问题中正确引用)。例如,在此示例代码中:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/iOS7bookExamples/bk2ch06p296customAnimation2/ch19p620customAnimation1/AppDelegate.m

...我不断更新UIPercentDrivenInteractiveTransition,告诉它用户的手势有多远,动画因此跟踪手势。现在问问自己:这有多可能????

嗯,反过来,UIPercentDrivenInteractiveTransition在幕后不断调整图层timeOffset来描绘相应帧的动画。 (您实际上可以在我的示例中添加日志记录代码,以确定这是真的。)

此外,当我在一个不完整的点结束手势时,动画要么赶到它的结尾,要么倒退到它的开头 - 再次,这是因为CAMediaTiming协议允许你改变speed的动画,包括负值以向后运行。