我想在navigationController的推送和弹出中制作过渡动画。但它真的很奇怪。就像1/ fromViewController
淡出它应该淡出但toViewController
不会淡入,它就会出现。限制条件有时候也很奇怪。如果我使用标准转换,一切都OK。这是我的过渡课程:
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)
}
}
}
答案 0 :(得分:0)
奇怪的是,在定义toViewController?.view.frame = fromViewController!.view.frame
和toViewController
之后放置fromViewController
来解决问题。 (感谢A'狄更斯发现它)。这是最终的代码
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)
}
}
}