美文网首页好东西小知识点
系统右滑返回上一级 和 播放进度条 冲突问题解决

系统右滑返回上一级 和 播放进度条 冲突问题解决

作者: 果哥爸 | 来源:发表于2017-08-21 10:41 被阅读43次

    一. 问题

    最近项目遇到这样一个问题,如下图所示:

    语音播放.png

    这里系统右滑返回上一级跟播放进度条拖动有冲突,当播放进度在最开始的时候,一拖动就立马返回上一级界面。因此再次记录下解决方法。

    二. 解决方法

    • viewDidAppear函数里设置返回上一级界面手势的代理,在viewDidDisappear函数里面移除代理。

      - (void)viewDidAppear:(BOOL)animated {
          [super viewDidAppear:animated];
           self.navigationController.interactivePopGestureRecognizer.delegate = self;
      }
      
      - (void)viewDidDisappear:(BOOL)animated {
          [super viewDidDisappear:animated];
          self.navigationController.interactivePopGestureRecognizer.delegate = nil;
      }
      
    • 然后在 代理 方法- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer里面判断,当前触摸的view是否为返回上一级手势的UILayoutContainerView,如果是判断当前触摸点和进度条所在位置是否一致,如果一致返回NO

    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    
        // 首先判断otherGestureRecognizer是不是系统pop手势
        if ([gestureRecognizer.view isKindOfClass:NSClassFromString(@"UILayoutContainerView")]) {
            CGPoint point = [gestureRecognizer locationInView:gestureRecognizer.view];
        
            CGRect rectInTableView = [self.tableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    
            CGRect rect = [self.tableView convertRect:rectInTableView toView:self.view];
            if ((point.y > rect.origin.y - 200) && (point.y < rect.origin.y - 100)) {
                return NO;
            }
            return YES;
        }
        return YES;
    }
    

    这里因为进度条放在了tableView的头部,因此需要先进行转换得到相对于viewControllerview的位置,再进行判断。

    相关文章

      网友评论

        本文标题:系统右滑返回上一级 和 播放进度条 冲突问题解决

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