UINavigationController的

UINavigationController的

我将一个特定的视图控制器推到导航控制器的导航堆栈时,试图实现一个自定义的id <UIViewControllerAnimatedTransitioning>对象。

但是,我发现,这样做会阻止UINavigation控制器使用默认的交互式过渡,即使在不使用我的自定义过渡的视图控制器上也是如此。

我不知道为什么会这样。

经过进一步调查,我发现该方法返回nil

- (id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                               animationControllerForOperation:(UINavigationControllerOperation)operation
                                            fromViewController:(UIViewController *)fromVC
                                              toViewController:(UIViewController *)toVC

某种程度上也禁用了默认的交互式过渡。

如何在某些情况下继续使用UINavigationController的默认交互式过渡,而在其他情况下又使用自定义过渡对象?

最佳答案

这是blog post,详细说明了可能的解决方案。我还没有测试。似乎是一个骇人的解决方法。正如作者所说,如果苹果改变事情,它可能会破裂,但是嘿。

引用:

我最终要做的是创建一个新的
UIScreenEdgePanGestureRecognizer,用左边缘和
设定与我们完全相同的目标/动作
interactivePopGestureRecognizer,换句话说,是
_UINavigationInteractiveTransition和操作handleNavigationTransition:。最后将其添加到
UINavigationControllers视图。有一些-valueForKey:
NSSelectorFromString()在最终的解决方案中我不是很自豪
的,但是效果很好。记住在实施
众所周知,像这样的解决方案,苹果改变了东西。

08-05 21:59