【发布时间】:2025-11-25 14:35:01
【问题描述】:
回答:简单的语法错误 - 设置委托时,它应该读取 SomeNavigationController.delegate = self,而不是 SomeNavigationController.navigationController?.delegate = self
下面是创建导航控制器的基本视图控制器。我将 self 声明为其委托,并在该视图控制器的扩展中符合委托的协议,并创建了一个对象作为自定义动画师。但是这个导航栈中的视图控制器不采用这个动画;我错过了什么?
此导航堆栈的根视图控制器中或在此堆栈中被推送和弹出的视图控制器中是否需要存在任何代码?还是所有自定义动画代码都属于这里(在创建导航控制器的视图控制器中)而我只是缺少一些东西?
创建 UINavigationController 的视图控制器
class BaseViewController: UIViewController {
override func loadView() {
buildNavigationController()
}
func buildNavigationController() {
let SomeNavigationControllerRoot = SomeViewController()
let SomeNavigationController = UINavigationController(rootViewController: SomeNavigationControllerRoot)
SomeNavigationController.delegate = self
view.addSubview(SomeNavigationController.view)
}
}
extension BaseViewController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return CustomAnimator()
}
}
class CustomAnimator: NSObject, UIViewControllerAnimatedTransitioning {
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return 1.0
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let containerView = transitionContext.containerView
let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)
containerView.addSubview(toViewController!.view)
toViewController!.view.alpha = 0.0
UIView.animate(withDuration: 1.0, animations: {
toViewController!.view.alpha = 1.0
}, completion: { finished in
let cancelled = transitionContext.transitionWasCancelled
transitionContext.completeTransition(!cancelled)
})
}
}
UINavigationController 堆栈中的根视图控制器
class SomeViewController: UIViewController, UINavigationControllerDelegate {
func pushToNext() {
let randomViewController = randomViewController()
navigationController?.pushViewController(randomViewController, animated: true)
}
}
【问题讨论】:
-
我猜不是委托设置转换委托。 toViewController.transitioningDelegate = self.
标签: ios swift uinavigationcontroller