ios - UIViewControllerAnimatedTransitioning 无法正常工作

标签 ios xcode swift

我想在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 放在 toViewControllerfromViewController 后面就解决了问题> 被定义。 (感谢 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/

相关文章:

iphone - 如何在 Swift 中找到 iOS 应用程序内部目录的路径?

ios - 如何将UIView复制到另一个

ios - 委托(delegate)不会执行功能

ios - 在 stringByReplacingOccurrencesOfString 中替换的字符串数

ios - AppCode 没有目标产品

ios - 在 swift 2 中调用电话的按钮?

ios - Xcode - 创建了一个 iOS 框架但不能在项目中使用它

iPhone 应用程序随机崩溃,没有任何错误或堆栈跟踪

swift - NSPredicate 用于搜索带双引号的字符串

facebook - 在 Swift 中使用 Open Graph Facebook SDK 4.4 发送图像和文本