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

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

作者: 林大鹏 | 来源:发表于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