当使用手势驱动的UIPercentDrivenInteractiveTransition和CABasicAnimation(或任何其他CAAnimation)时,在finishInteractiveTransition上,动画会跳转到最终位置,而不是像使用UIView块动画时那样平滑地制作动画。我试图弄清楚如何在使用CAAnimation时finishInteractiveTransition平滑动画。
我现在花了一整天时间。似乎没有任何关于将CAAnimation与自定义VC转换一起使用的提及,每个人都引用基于UIView块的动画。
我创建了一个展示问题的小样本项目。
https://github.com/stringcode86/UIPercentDrivenInteractiveTransitionWithCABasicAnimation
感谢任何花时间看它的人。我很感激。
答案 0 :(得分:12)
解
事实证明,解决方案是操纵图层的开始时间。我将尝试在下面更深入地解释解决方案。有两个使用UIPercentDrivenTransition
子类或实现UIViewControllerInteractiveTransitioning
协议的解决方案。自定义UIViewControllerInteractiveTransitioning位于主分支上,UIPercentDrivenTransition实现位于UIPercentDrivenTransitionImplementation分支上。
https://github.com/stringcode86/UIPercentDrivenInteractiveTransitionWithCABasicAnimation
说明
UIPercentDrivenTransition在animateTransition中使用动画:实现updateInteractiveTransition:
。我猜他们只是从animateTransition:
调用startInteractiveTransition:
,然后将图层(可能是容器视图图层)的速度设置为0.0并操纵其timeOffSet
。这允许他们自动前后移动您的过渡。这适用于你的UIView动画。 CAAnimations的问题是他们的begingTime
,timeOffSet
,speed
属性由于某种原因未正确设置。如果将它们设置为合理值,则可以在containerView中来回移动所有动画内容。我创建了SCPercentDrivenTransition
女巫替代UIPercentDrivenTransition
。您只需要覆盖animateTransition:并从手势识别器操作调用中调用handleGesture:。