簡體   English   中英

UIViewControllerAnimatedTransitioning 在進出視圖動畫時顯示黑屏

[英]UIViewControllerAnimatedTransitioning shows a black screen when animating to and from view

我正在嘗試為我的視圖控制器創建一個easeInEaseOut animation,但是,當我嘗試為“to”和“from”視圖設置動畫時,“from”視圖會變黑,直到 animation 完成。 如果我只為“到”視圖設置動畫,那么新視圖 controller 可以正確設置動畫,但在“從”視圖的頂部。 我希望這兩個觀點一起移動,給人一種印象,即第一個正在滑落,為第二個讓路(我想被第二個推開更准確)。 誰能告訴我為什么會這樣? 我嘗試過多種設置,請參見下面的代碼:

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        guard let toVC = transitionContext.viewController(forKey: .to), let fromVC = transitionContext.viewController(forKey: .from) else {
            dLog("No to or from VC")
            transitionContext.completeTransition(false)
            return
        }

        switch animationType {
        case .present:
            dLog("Present VC")
            transitionContext.containerView.addSubview(fromVC.view)
            transitionContext.containerView.addSubview(toVC.view)
            presentAnimation(with: transitionContext, fromView: fromVC.view, toView: toVC.view)
        case .dismiss:
            dLog("Dismiss VC")
        }
    }

    func presentAnimation(with transitionContext: UIViewControllerContextTransitioning, fromView: UIView, toView: UIView) {
        fromView.clipsToBounds = true
        toView.clipsToBounds = true
        fromView.transform = CGAffineTransform(translationX: 0, y: 0)
        toView.transform = CGAffineTransform(translationX: toView.frame.size.width, y: 0)

        let duration = transitionDuration(using: transitionContext)

        UIView.animate(withDuration: duration, delay: 0.0, usingSpringWithDamping: 0.0, initialSpringVelocity: 0.0, options: .curveEaseInOut, animations: {
            toView.transform = CGAffineTransform(translationX: 0.0,  y: 0.0)
            fromView.transform = CGAffineTransform(translationX: -fromView.frame.size.width, y: 0)
        }) { _ in
            transitionContext.completeTransition(true)
        }
    }

如果其他人為此苦苦掙扎,我想通了。 您必須改用 animateKeyFrames :

UIView.animateKeyframes(withDuration: duration, delay: 0.0, options: .calculationModeLinear, animations: {
            UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 2.0) {
                toView.transform = CGAffineTransform(translationX: 0, y: 0)
            }
            UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 2.0) {
                fromView.transform = CGAffineTransform(translationX: -fromView.frame.size.width, y: 0)
            }
        }) { _ in
            transitionContext.completeTransition(true)
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM