[分享]iOS开发-自定义返回按钮后手动添加手势返回解决方案

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

网上常见的几种方法:

方法1:http://keighl.com/post/ios7-i...

方法2:http://blog.csdn.net/zhaoxy_t...

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

nested pop animation can result in corrupted navigation bar

Unbalanced 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://ju.outofmemory.cn/entr...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值