Junior — Middle
Чӣ гуна метавон гузариши анимациии шахсиро дар вақти гузаштан байни экранҳо дар Navigation Controller амалӣ кард?
sobes.tech AI
Ҷавоб аз AI
Барои татбиқ кардани гузариши анимационӣ дар байни экранҳо дар UINavigationController, бояд протоколҳои UIViewControllerAnimatedTransitioning ва UINavigationControllerDelegate-ро истифода баред.
-
Синфе созед, ки протоколи
UIViewControllerAnimatedTransitioning-ро иҷро мекунад, ва логикаи анимацияро дар методҳо:transitionDuration(using:)— дарозии анимацияanimateTransition(using:)— худи анимация
-
Делегати 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)
}
}
}