自定義專場動畫 UINavigationControllerDelegate與animateTransition

class CustomPushAnimation: NSObject, UIViewControllerAnimatedTransitioning {

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

    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

    /// 判斷是否登陸頁面
    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
}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容