我将一个特定的视图控制器推到导航控制器的导航堆栈时,试图实现一个自定义的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()
在最终的解决方案中我不是很自豪
的,但是效果很好。记住在实施
众所周知,像这样的解决方案,苹果改变了东西。