我在视图控制器中有一个按钮,它有一个阴影。此阴影与动画一起应用,在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
总结太难了。别麻烦了。