iOS自定义全屏返回与tableView左划删除手势冲突解决

十月你好!

当自定义一个navigationController实现全屏右划返回时, 使用起来是不是很爽, 代码如下:

- (void)viewDidLoad {

    [super viewDidLoad];

    UIGestureRecognizer  *gester = self.interactivePopGestureRecognizer;

    UIPanGestureRecognizer *panGesTer = [[UIPanGestureRecognizer alloc] initWithTarget:gester.delegate action:NSSelectorFromString(@"handleNavigationTransition:")];

    [gester.view addGestureRecognizer:panGesTer];

    gester.delaysTouchesBegan = YES;

    panGesTer.delegate = self;
}

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{

    if (self.childViewControllers.count == 1 ) {
        return NO;
    }
    return YES;
}

然鹅, 当你在tableView中打开左划编辑功能时发现死活也左划不了, 肿么肥四呢, 是打开姿势不对吗, MGD! 还是手势冲突呢?

好吧, 打个断点试试! 断点后发现进不来tableView的编辑方法, 进到了自定义的navigationController的gestureRecognizerShouldBegin方法, 原来是被拦截了. 那来判断一下是左划还是右划吧, 如果左划的话就不拦截, 交给tableView去响应! 代码如下(在自定义的navigationController方法中修改):

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
        
        if (self.childViewControllers.count == 1 ) {
            return NO;
        }
        
        if (self.interactivePopGestureRecognizer &&
            [[self.interactivePopGestureRecognizer.view gestureRecognizers] containsObject:gestureRecognizer]) {
            
            CGPoint tPoint = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:gestureRecognizer.view];
            
            if (tPoint.x >= 0) {
                CGFloat y = fabs(tPoint.y);
                CGFloat x = fabs(tPoint.x);
                CGFloat af = 30.0f/180.0f * M_PI;
                CGFloat tf = tanf(af);
                if ((y/x) <= tf) {
                    return YES;
                }
                return NO;
                
            }else{
                return NO;
            }
        }
    }
    
    return YES;
}

史上最详细的iOS之事件的传递和响应机制-原理篇

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 24,223评论 8 184
  • github排名https://github.com/trending,github搜索:https://gith...
    小米君的demo阅读 4,886评论 2 38
  • 双11有个重要特点,就是双11已经成了一个社会性的、全民性的节日,是全民狂欢式的购物节,而不仅仅是一个行业的...
    景景相依阅读 412评论 0 0
  • 昨天接到小道消息,单位又要搞竞争上岗了,据说这次还是没有我 心里有点慌慌的,距离上次提拔已经三年了,跟我一起提拔的...
    每文2016阅读 353评论 0 0
  • 与君短短相识一日, 却已胜过千年万年。 突晓君将离去, 心中点点惆怅, 不知何日能与君相见。 不见独念于心, 不忘...
    浅黛慕雨阅读 226评论 0 0