我想在navigationController的推送和弹出上制作一个过渡动画。但它的工作原理真的很奇怪。就像 1/5 倍一样,fromViewController
会淡出,但 toViewController
不会淡入,它只是出现。限制有时也会变得很奇怪。如果我使用标准过渡,那就没问题了。这是我的过渡类(class):
class TMFadeAnimator: NSObject, UIViewControllerAnimatedTransitioning {
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
return 0.5
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)
let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)
toViewController?.beginAppearanceTransition(true, animated: true)
fromViewController?.beginAppearanceTransition(false, animated: true)
transitionContext.containerView()!.addSubview(toViewController!.view)
toViewController!.view.alpha = 0.0
UIView.animateWithDuration(self.transitionDuration(transitionContext), animations: {
toViewController!.view.alpha = 1.0
fromViewController!.view.alpha = 0.0
}) { (finished) in
toViewController?.endAppearanceTransition()
fromViewController?.endAppearanceTransition()
transitionContext.completeTransition(finished)
}
}
}
最佳答案
奇怪的是,通过将 toViewController?.view.frame = fromViewController!.view.frame
放在 toViewController
和 fromViewController
后面就解决了问题> 被定义。 (感谢 A'sa Dickens 的发现)。这是最终的代码
class TMFadeAnimator: NSObject, UIViewControllerAnimatedTransitioning {
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
return 0.5
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)
let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)
toViewController?.view.frame = fromViewController!.view.frame
toViewController?.beginAppearanceTransition(true, animated: true)
fromViewController?.beginAppearanceTransition(false, animated: true)
transitionContext.containerView()!.addSubview(toViewController!.view)
toViewController!.view.alpha = 0.0
UIView.animateWithDuration(self.transitionDuration(transitionContext), animations: {
toViewController!.view.alpha = 1.0
fromViewController!.view.alpha = 0.0
}) { (finished) in
toViewController?.endAppearanceTransition()
fromViewController?.endAppearanceTransition()
transitionContext.completeTransition(finished)
}
}
}
关于ios - UIViewControllerAnimatedTransitioning 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600276/