zoukankan      html  css  js  c++  java
  • 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去响应! 代码如下:

    - (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;
    }

    貌似可以了! 欧耶!

    可如果tableView也有右划呢......

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

  • 相关阅读:
    微软面试题_中文字符串转换为数字
    微软面试题_3个字母的组合
    LeetCode Notes_#1031_两个非重叠子数组的最大和
    剑指Offer_#57-II_和为 s 的连续正数序列
    LeetCode Notes_#560 和为k的子数组
    LeetCode Notes_#84 柱状图中最大的矩形
    LeetCode Notes_#221 最大正方形
    LeetCode Notes_#146 LRU缓存机制
    码云团队开发项目拉取与推送
    vue父子组件的双向绑定
  • 原文地址:https://www.cnblogs.com/Milo-CTO/p/7493906.html
Copyright © 2011-2022 走看看