如何同步UIViewControllerInteractiveTransitioning和CABasicAnimatio



我在视图控制器中有一个按钮,它有一个阴影。此阴影与动画一起应用,在viewWillAppear中。

按钮位于名为"buttonContainer"的空视图中。

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

CATransaction.begin()
CATransaction.setCompletionBlock {
self.buttonContainer.layer.shadowOpacity = 1
}

let animation = CABasicAnimation(keyPath: "shadowOpacity")
animation.fromValue = buttonContainer.layer.shadowOpacity
animation.toValue = 1
animation.duration = 0.6
buttonContainer.layer.add(animation, forKey: animation.keyPath)

CATransaction.commit()
}

我希望使用视图控制器的推送动画来设置阴影的动画。我开始实现"UIViewControllerAnimatedTransitioning",但我找不到将动画持续时间与CABasicAnimation联系起来的方法。

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let containerView = transitionContext.containerView
let button = containerView.viewWithTag(68) as! UIButton
let animation = CABasicAnimation(keyPath: "shadowOpacity")
animation.fromValue = ?
animation.toValue = ?
}

我想我需要实现UIViewControllerInteractiveTransitioning,但我想不出一种方法来连接CABasicAnimation。感谢的任何帮助

仔细阅读后,似乎有人在较低级别的CALayer动画和"UIViewControllerInteractiveTransitioning"之间实现了一座桥梁

https://github.com/stringcode86/UIPercentDrivenInteractiveTransitionWithCABasicAnimation/blob/master/InteractiveTransition/SCPercentDrivenInteractiveTransition.m

但它是很久以前做的,我还没有时间验证。有一点是肯定的,它看起来很难看。

UIViewPropertyAnimator类在iOS 10中发布,旨在通过提供与"addAnimation"one_answers"addCompletion"等函数的协调来帮助实现这一桥接。

这些人已经通过UIViewPropertyAnimator实现了一个干净的解决方案,用于桥接"CALayer"one_answers"UIViewControllerInteractiveTransitioning"的动画。

https://github.com/hedjirog/CustomPresentation

总结太难了。别麻烦了。

最新更新