美文网首页
iOS 侧滑返回假死·push/pop失败

iOS 侧滑返回假死·push/pop失败

作者: 郭桥生 | 来源:发表于2018-08-23 15:21 被阅读0次

最近改一个项目
里面用到了侧滑返回·部分页面隐藏导航栏
改的过程中发现 上一波人两种效果都没搞好
所以现在我的任务就是把它搞好,可是实际的时候页面切换出现了假死问题
上一个项目是一样的套路,为什么这个项目就出错了呢,搞了我两天后不得不坐下来像个程序员一样一步一步检查代码了

  • 1 遇到的问题->触发手势返回之后 下一次跳转会进入假死状态
  • 2 可能的原因->interactivePopGestureRecognizer失效 · 线程切换问题
1 interactivePopGestureRecognizer的检查

所以先从interactivePopGestureRecognizer设置开始检查
这里也没什么说的,直接之前的代码copy过来

// 这些代码放到继承的UINavigationController里面即可
- (void)viewDidLoad {
    [super viewDidLoad];
    [self updatePopGestureDelegate];
}

- (void)updatePopGestureDelegate {
    /*
     默认全局开启侧滑返回
     在BaseViewController里面每一个viewDidLoad里面设置
     self.navigationController.interactivePopGestureRecognizer.enabled = NO;
     特殊情况下
     在viewDidAppear里面设置self.navigationController.interactivePopGestureRecognizer.enabled = NO
     在viewDidDisappear里面设置self.navigationController.interactivePopGestureRecognizer.enabled = YES
     */
    __weak MHWNavigationController *weakSelf = self;
    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.interactivePopGestureRecognizer.delegate = weakSelf;
        self.delegate = weakSelf;
    }
}

//侧滑代理
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    if (gestureRecognizer == self.interactivePopGestureRecognizer && self.viewControllers.count > 1) {
        return YES;
    }
    return NO;
}

实际实际使用中加了这些就够了,但是在运行的时候发现还是不行
所以排除这一块的问题,转向检查线程切换的问题

2 线程切换的检查

因为这个项目里面又的页面隐藏了导航栏,有的页面没隐藏,这样来来去去的很乱,页面切换有的连动画都没有,体验起来就像是个三流app,所以我又加了一个新的BaseViewController并且在里面增加了动画设置

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.navigationController setNavigationBarHidden:self.hideNavigationbarWhenViewWillAppear animated:YES];
    });
}

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    if (self.hideNavigationbarWhenViewWillDisappear) {
        [self.navigationController setNavigationBarHidden:YES animated:YES];
    }
}

就是这一句dispatch_async啊,就是这线程切换
系统的方法最好不要加线程切换,把这一句dispatch_async去掉
果然就OK了

[self.navigationController setNavigationBarHidden:YES animated:YES];
系统方法最好在默认线程环境执行
就像push pop操作一样在viewWillAppear里面失效一样,线程还是不能乱切
搞了我两天才想到有过这么一个方法设置

关联关键字interactivePopGestureRecognizer·freeze·push not work

相关文章

  • iOS 侧滑返回假死·push/pop失败

    最近改一个项目里面用到了侧滑返回·部分页面隐藏导航栏改的过程中发现 上一波人两种效果都没搞好所以现在我的任务就是把...

  • iOS 侧滑返回

    iOS 侧滑返回 BBGestureBack iOS 全屏手势返回 滑动返回 pop 动画效果 这种手势主流App...

  • iOS 侧滑返回详解

    iOS 侧滑返回详解 BBGestureBack iOS 全屏手势返回 滑动返回 pop 动画效果 这种手势主流A...

  • iOS 侧滑返回详解

    iOS 侧滑返回 BBGestureBack iOS 全屏手势返回 滑动返回 pop 动画效果 这种手势主流App...

  • iOS 侧滑返回手势与Scrollview冲突的解决办法

    苹果在iOS7.0以后推出了一个侧滑返回手势,当导航栏Push到下一页时,可以通过侧滑手势pop到上一页,这大大提...

  • iOS笔记之_侧滑返回

    方法一: iOS 侧滑返回功能,自定义手势触发系统的pop动画。handleNavigationTransitio...

  • iOS pop 侧滑返回处理

    方案一 : 开启使用系统自带的侧滑返回iOS7之后系统提供了侧滑手势(interactivePopGestureR...

  • iOS 侧滑返回失败

    一个偶然的事件,事情是这样的:有一个页面需要侧滑返回拦截,我把代理设置给了当前的ViewController 然后...

  • NavigationController的侧滑返回功能

    侧滑返回NavigationController自从iOS7.0之后, 增加了一个滑动返回功能, 当push入一个...

  • iOS 右滑返回

    iOS 右滑返回 BBGestureBack iOS 全屏手势返回 滑动返回 pop 动画效果 这种手势主流App...

网友评论

      本文标题:iOS 侧滑返回假死·push/pop失败

      本文链接:https://www.haomeiwen.com/subject/actmiftx.html