iOS – 如何使animation轨道触动
实现跟踪触摸的平滑倒车animation的最佳方式是什么? 我指的是那些animation,其中,例如,如果用户执行轻扫手势,则某些元素在屏幕上平滑地animation,而其他元素则closures, 但是如果用户反而慢慢地来回拖动平移手势,则相同的对象将向前/按照触摸位置的百分比向后。 这是在许多应用程序的前奏和转换。 我已经发现
- 一个教程,讨论内置的设施,但它只是在视图控制器之间的转换,而不是提供我在许多应用程序中看到的全面粒度控制( http://www.doubleencore.com/2013/09/ios-7-定制转换/ )
- Jazzhands,这是IFTTT的一个套件,但是这是一个打包的解决scheme,可能不包括如何在较低级别上实现解决scheme( https://github.com/IFTTT/JazzHands )
- 这里的问题是哪一个答案显示了在手势结束之后如何执行animation( iOS Touch,手势,animation )
我不掌握的东西 – 我喜欢使用CAAnimations和手势 – 是一件既可以animation 又可以 互动的东西。
通常情况下,当我创build一个animation,我承诺animation,它从头到尾。 虽然我可以打断animation继续,似乎它会被拖垮。
另一方面,响应用户input移动东西很容易,但这不是animation。
如果某些东西可以根据animation进行更改而获得效果,但是也可以将相同的animation与动作相关联, 但仍然具有这样的效果,即使animation达到完成也不会真正“完成”(变成不可逆的),除非用户释放触摸,而在交互期间的任何时候,如果用户释放平移,则animation或者返回到其开始位置或者根据最后的触摸位置和速度animation到完成。 这些要求令人困惑。
我所看到的这种技术的一瞥都涉及关键帧animation,但我不明白的地方是触摸事件与animation相交的地方,以创build我所看到的这些平滑效果。
任何提示,例子或教程是最受欢迎的。
我不掌握的东西 – 我喜欢使用CAAnimations和手势 – 是一件既可以animation又可以互动的东西。
这是因为,设置了一个animation,您可以将该animation设置为您希望的任何“框架”。 因此,您可以根据手势的移动来跟踪animation。
这种方式的工作原理是animation是属于CALayer的渲染树的一个特性。 CALayer实现CAMediaTiming协议。 CALayer的timeOffset
因此确定层显示的animation的“帧”。 如果一个复杂的animation涉及许多不同的层次,没有问题; 只需设置它们相互的超级层的timeOffset
,来控制整个animation的框架。
实际上,这正是新的iOS 7交互式自定义转换function的工作原理(在您的问题中您正确地引用了这个function)。 例如,在这个示例代码中:
…我不断更新UIPercentDrivenInteractiveTransition来告诉它用户的手势有多远,因此animation会跟踪手势。 现在问自己:怎么这是可能的?
那么,UIPercentDrivenInteractiveTransition反过来在幕后继续调整图层的timeOffset
以在相应的框架上描绘animation。 (实际上,您可以将日志logging代码添加到我的示例中,看看是否如此。)
而且,当我以不完整的点结束手势时,animation要么跑到最后,要么倒退到最初 – 这是因为CAMediaTiming协议,它允许你改变animation的speed
,包括一个负值向后运行。