Sobes.tech
Junior — Middle

Kaip galima įgyvendinti savo animuotą perėjimą pereinant tarp ekranų Navigation Controller?

sobes.tech AI

Atsakymas iš AI

Savo animacinio perėjimo tarp ekranų įgyvendinimui UINavigationController reikia naudoti UIViewControllerAnimatedTransitioning ir UINavigationControllerDelegate protokolus.

  1. Sukurkite klasę, įgyvendinančią UIViewControllerAnimatedTransitioning, kurioje aprašote animacijos logiką:

    • transitionDuration(using:) — animacijos trukmė
    • animateTransition(using:) — pati perėjimo animacija
  2. Nustatykite UINavigationController delegatu objektą, kuris įgyvendina UINavigationControllerDelegate, ir metodo:

    func navigationController(_ navigationController: UINavigationController, 
                              animationControllerFor operation: UINavigationController.Operation, 
                              from fromVC: UIViewController, 
                              to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        // grąžinate savo animacijos objektą
        return customAnimator
    }
    

Paprasto kustominio animatoriaus pavyzdys:

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)
        }
    }
}