Sobes.tech
Junior — Middle

Чӣ гуна метавон гузариши анимациии шахсиро дар вақти гузаштан байни экранҳо дар Navigation Controller амалӣ кард?

sobes.tech AI

Ҷавоб аз AI

Барои татбиқ кардани гузариши анимационӣ дар байни экранҳо дар UINavigationController, бояд протоколҳои UIViewControllerAnimatedTransitioning ва UINavigationControllerDelegate-ро истифода баред.

  1. Синфе созед, ки протоколи UIViewControllerAnimatedTransitioning-ро иҷро мекунад, ва логикаи анимацияро дар методҳо:

    • transitionDuration(using:) — дарозии анимация
    • animateTransition(using:) — худи анимация
  2. Делегати UINavigationController-ро ба объектие таъин кунед, ки протоколро иҷро мекунад UINavigationControllerDelegate, ва дар метод:

    func navigationController(_ navigationController: UINavigationController, 
                              animationControllerFor operation: UINavigationController.Operation, 
                              from fromVC: UIViewController, 
                              to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        // объекти анимацияро баргардонед
        return customAnimator
    }
    

Масалан, як аниматори оддӣ:

class CustomAnimator: NSObject, UIViewControllerAnimatedTransitioning {
    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.3
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        guard let toView = transitionContext.view(forKey: .to) else {
            transitionContext.completeTransition(false)
            return
        }
        let container = transitionContext.containerView
        toView.alpha = 0
        container.addSubview(toView)

        UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: {
            toView.alpha = 1
        }) { finished in
            transitionContext.completeTransition(finished)
        }
    }
}