>一个教程讨论了内置工具,但它只在视图控制器转换之间,没有提供我在许多应用程序中看到的完全粒度控制(http://www.doubleencore.com/2013/09/ios-7-custom-transitions/)
> Jazzhands,这是IFTTT的一个套件,但这是一个打包的解决方案,可能无法涵盖如何在较低级别最好地实施解决方案(https://github.com/IFTTT/JazzHands)
>这里有一个问题,其中一个答案显示了手势结束后如何执行动画(iOS Touch,Gestures,Animation)
我没有掌握的 – 我很喜欢使用CAAnimations和手势 – 是什么东西既可以动画也可以互动.
通常,当我创建动画时,我会提交动画并从头到尾进行动画制作.虽然我可以在触摸继续时中断动画,但这似乎是笨拙的.
另一方面,响应用户输入移动物体很容易,但这不是动画.
如果某些东西可以根据动画发生变化,效果如何,但同样的动画也会出现与触摸相关的现象,但仍然有它,这样即使动画完成也不会真正“完成”(变得不可逆转) )除非用户释放触摸,否则在交互期间的任何时刻如果用户释放平移,则动画要么返回到其起始位置,要么根据最后的触摸位置和速度动画到完成.这些要求令人费解.
我看到的这种技术的一瞥都涉及关键帧动画,但我不明白的是触摸事件与动画相交的位置,以创建我看到的这些平滑效果.
我们非常欢迎任何提示,示例或教程.
解决方法
What I don’t grasp – and I’m comfortable using CAAnimations and gestures – is how something can be both animated and interactive.
这是因为,设置动画后,您可以将动画设置为您想要的任何“帧”.因此,您可以根据手势的移动跟踪动画.
这种方式的工作方式是动画是渲染树的一个特征,属于CALayer. CALayer实现CAMediaTiming协议.因此,CALayer的timeOffset确定该图层显示的动画的“帧”.如果一个复杂的动画涉及许多不同的层,没有问题;只需设置其相互超层的timeOffset,即可控制整个动画的帧.
事实上,这正是新的iOS 7交互式自定义转换功能的工作原理(您在问题中正确引用).例如,在此示例代码中:
…我不断更新UIPercentDrivenInteractiveTransition,告诉它用户的手势有多远,动画因此跟踪手势.现在问问自己:这怎么可能?
嗯,UIPercentDrivenInteractiveTransition,在幕后,继续调整图层的timeOffset来描绘相应帧的动画. (您实际上可以在我的示例中添加日志记录代码,以确保这是真的.)
此外,当我在一个不完整的点结束手势时,动画要么快速结束或者向后跑到它的开始 – 再次,这是因为CAMediaTiming协议,它允许你改变动画的速度,包括负值向后运行