自定义推送动画打破默认交互式弹出动画

Posted

技术标签:

【中文标题】自定义推送动画打破默认交互式弹出动画【英文标题】:Custom push animation broking default interactive pop animation 【发布时间】:2016-12-29 09:58:34 【问题描述】:

在我的导航控制器委托中,我有以下代码:

- (id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                   animationControllerForOperation:(UINavigationControllerOperation)operation
                                                fromViewController:(UIViewController *)fromVC
                                                  toViewController:(UIViewController *)toVC 
    if ([toVC isKindOfClass:[ParentViewController class]]) 
        if (operation == UINavigationControllerOperationPush) 
            return [(ParentViewController *)toVC pushAnimator];
        
    
    return nil;

Push animator 实现如下(一些视图控制器覆盖它以实现自定义转换):

- (id<UIViewControllerAnimatedTransitioning>)pushAnimator 
    return nil;

但是在这个默认的交互式弹出动画被破坏之后(但是根据文档,如果这个方法返回 nil 默认动画将被使用),即使我没有为选定的视图控制器使用自定义过渡。

如何为某些屏幕带来交互式弹出手势,但带有自定义推送动画?

【问题讨论】:

你解决了吗?我有同样的问题 【参考方案1】:

只需在视图控制器(或其他任何东西)上实现UIGestureRecognizerDelegate,然后执行

navigationController?.interactivePopGestureRecognizer?.delegate = self

看起来你甚至不需要实现任何东西,但是你可能想尝试类似的东西

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool 
    return navigationController?.viewControllers.count ?? 0 > 1

【讨论】:

以上是关于自定义推送动画打破默认交互式弹出动画的主要内容,如果未能解决你的问题,请参考以下文章

自定义推送和弹出动画 iOS 7 和 8

elementUI 弹窗组件全局和局部 弹入弹出动画效果实现

如何在基于导航的应用程序中更改推送和弹出动画

提供自定义动画控制器时,UINavigationController 中的系统交互弹出手势中断

多次推送和弹出动画 NO 后导航栏的奇怪行为。 IOS 7

UIToolbar 推送视图问题