自定義專場(chǎng)動(dòng)畫 UINavigationControllerDelegate與animateTransition

class CustomPushAnimation: NSObject, UIViewControllerAnimatedTransitioning {

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
    transitionContext.containerView.backgroundColor = UIColor.white // 修改過(guò)渡時(shí)的背景顏色

    let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)!
    let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)!

    let toVcName = NSStringFromClass(type(of: toViewController)).components(separatedBy: ".").last! as String

    /// 判斷是否登陸頁(yè)面
    if toVcName == "AuthMainController" {

// let snap = fromViewController.view.snapshotView(afterScreenUpdates: true)
//
// transitionContext.containerView.addSubview(snap!)

        toViewController.tabBarController?.tabBar.isHidden = true
        fromViewController.tabBarController?.tabBar.isHidden = true

        transitionContext.containerView.insertSubview(toViewController.view, aboveSubview: fromViewController.view)
        toViewController.view.transform = CGAffineTransform(translationX: 0, y: kScreenH)
        UIView.animate(withDuration: self.transitionDuration(using: transitionContext), animations: {
            toViewController.view.transform = CGAffineTransform(translationX: 0, y: kTopH)
            fromViewController.view.transform = CGAffineTransform(translationX: 0, y: -kScreenH)
        }) { (completion) in
            fromViewController.view.transform = CGAffineTransform.identity
            transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
        }
    } else {
        /// 全透明
        transitionContext.containerView.insertSubview(toViewController.view, aboveSubview: fromViewController.view)
        if fromViewController.navBarBackgroundAlpha == 0 && toViewController.navBarBackgroundAlpha == 0 {
            toViewController.view.transform = CGAffineTransform(translationX: kScreenW, y: kTopH)
            UIView.animate(withDuration: self.transitionDuration(using: transitionContext), animations: {
                toViewController.view.transform = CGAffineTransform.identity
                fromViewController.view.transform = CGAffineTransform(translationX: -kScreenW, y: 0)
            }) { (completion) in
                fromViewController.view.transform = CGAffineTransform.identity
                transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
            }
        } else {
            /// from透明
            if fromViewController.navBarBackgroundAlpha == 0 {
                toViewController.view.transform = CGAffineTransform(translationX: kScreenW, y: 0)
                UIView.animate(withDuration: self.transitionDuration(using: transitionContext), animations: {
                    toViewController.view.transform = CGAffineTransform(translationX: 0, y: kTopH)
                    fromViewController.view.transform = CGAffineTransform.identity
                }) { (completion) in
                    fromViewController.view.transform = CGAffineTransform.identity
                    transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
                }
            } else {

                toViewController.view.transform = CGAffineTransform(translationX: kScreenW, y: kTopH)
                UIView.animate(withDuration: self.transitionDuration(using: transitionContext), animations: {
                    toViewController.view.transform = CGAffineTransform(translationX: 0, y: kTopH)
                    fromViewController.view.transform = CGAffineTransform.identity
                }) { (completion) in
                    fromViewController.view.transform = CGAffineTransform.identity
                    transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
                }
            }

        }
    }
}

func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
    return 0.5
}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容