UIViewControllerAnimatedTransitioning无法正常工作

时间:2016-04-13 13:41:10

标签: ios xcode swift

我想在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)
        }
    }
}

1 个答案:

答案 0 :(得分:0)

奇怪的是,在定义toViewController?.view.frame = fromViewController!.view.frametoViewController之后放置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)
        }
    }
}