在 UINavigationController 中将过渡更改为 ONE ViewController,同时保持向后滑动
Change transition to ONE ViewController in a UINavigationController while keeping back-swipe
我想在我的 UINavigationController 中实现到一个特定视图控制器的自定义转换。
我可以通过在里面提供我的自定义 TransitionAnimator 来做到这一点
func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?
or return nil 否则一切正常!所以动画部分已经解决并且可以工作了!
但是在我想要默认过渡的时候 return 设为 nil,我松开了向后滑动的手势。
所以我的问题是:
我如何才能将我的自定义过渡提供给一个特定的 VC,但保持其他一切不变?!?
您可以尝试继承 UINavigationController 并自行管理 interactivePopGestureRecognizer。
class CustomNavController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
}
extension CustomNavController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if gestureRecognizer === interactivePopGestureRecognizer {
return viewControllers.count > 1
}
return true
}
}
您可以将视图控制器设为导航委托,然后将其重置为 nil。喜欢:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
navigationController?.interactivePopGestureRecognizer?.delegate = self
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
navigationController?.interactivePopGestureRecognizer?.delegate = nil
}
然后在视图控制器中执行您的自定义动画或制作一个 object/class 来为您处理
我想在我的 UINavigationController 中实现到一个特定视图控制器的自定义转换。
我可以通过在里面提供我的自定义 TransitionAnimator 来做到这一点
func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?
or return nil 否则一切正常!所以动画部分已经解决并且可以工作了!
但是在我想要默认过渡的时候 return 设为 nil,我松开了向后滑动的手势。
所以我的问题是: 我如何才能将我的自定义过渡提供给一个特定的 VC,但保持其他一切不变?!?
您可以尝试继承 UINavigationController 并自行管理 interactivePopGestureRecognizer。
class CustomNavController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
}
extension CustomNavController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if gestureRecognizer === interactivePopGestureRecognizer {
return viewControllers.count > 1
}
return true
}
}
您可以将视图控制器设为导航委托,然后将其重置为 nil。喜欢:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
navigationController?.interactivePopGestureRecognizer?.delegate = self
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
navigationController?.interactivePopGestureRecognizer?.delegate = nil
}
然后在视图控制器中执行您的自定义动画或制作一个 object/class 来为您处理