博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[分享]iOS开发-自定义返回按钮后手动添加手势返回解决方案
阅读量:6573 次
发布时间:2019-06-24

本文共 1159 字,大约阅读时间需要 3 分钟。

自定义返回按钮后手势返回就失效了,网上有很多方法都号称完美解决了,但在快速返回(注意:是非常快速的划屏幕边缘)时,依然会出现栈乱的问题导致crash.

网上常见的几种方法:

方法1:

方法2:

这些方法都能解决在push进去时的问题,但连续快速的返回,就会出现栈错乱,常见的错误如下:

nested pop animation can result in corrupted navigation barUnbalanced calls to begin/end appearance transitions for XXXController

由于手势返回时,会先执行popViewController,如果当前返回动画还没执行结束,紧接着又触发第二次就会出现问题。

解决思路自然就是第一次动画执行完之前,不让他触发。

在interactivePopGestureRecognizer的delegate里加入如下代码

//是否正在手势返回中的标示状态static BOOL _isPoping;-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{    if (!_isPoping) {        _isPoping = YES;        return YES;    }    return NO;}-(void)viewDidAppear:(BOOL)animated{    [super viewDidAppear:YES];    //在didAppear时置为NO    _isPoping = NO;}

这下终于随便怎么暴力后退都没问题了。

但是紧接着问题又来了,如果当前view是一个scrollview,有些情况,如果手指在45角方向划,由于返回手势还没执行就被取消了,被scrollview接管了,这时状态置为YES了,但是didAppear却没有调用。导致手势返回实效了。

又经过一番折腾,终于找到完美解决手势冲突,加上如下方法:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{    [otherGestureRecognizer requireGestureRecognizerToFail:gestureRecognizer];    return NO;}

只有在返回手势失败的情况下才让其他手势执行。


分享来源:

转载地址:http://afmjo.baihongyu.com/

你可能感兴趣的文章
Asp.net core Identity + identity server + angular 学习笔记 (第一篇)
查看>>
暂时不想读研的几点理由
查看>>
增加临时表空间组Oracle11g单实例
查看>>
Diff Two Arrays
查看>>
浅谈java垃圾回收机制
查看>>
关于svn和maven结合使用的讨论
查看>>
前端第五天
查看>>
shell脚本学习之for循环
查看>>
MFC用CFile写文件
查看>>
stark组件(1):动态生成URL
查看>>
169. Majority Element
查看>>
Django Form表单学习总结
查看>>
大整数加法
查看>>
下拉菜单
查看>>
C/C++中extern关键字详解
查看>>
[清华集训2014]玛里苟斯
查看>>
Doctype作用?严格模式与混杂模式如何区分?它们有何意义
查看>>
jquery选择器(可见对象,不可见对象) +判断,对象(逆序)
查看>>
0029-求最小的数
查看>>
【MVC+EasyUI实例】对数据网格的增删改查(上)
查看>>