美文网首页iOS高级进阶iOS Developer
iOS scrollView 左右滑动 内容错位

iOS scrollView 左右滑动 内容错位

作者: 南城同學 | 来源:发表于2017-05-19 17:39 被阅读563次

    环境:UIScrollView承载多个controller,顶部有选择控制器的标题栏按钮;

    现象:频繁的切换点击标题栏按钮,或左右滑动控制器,导致临近两控制的内容发生重叠现象。

    1.添加两个布尔属性
    @property (nonatomic, strong) UIScrollView *contentView;
    @property (nonatomic, assign) BOOL allowBtnCilck; //设置标志位,防止btn被频繁的响应
    @property (nonatomic, assign) BOOL isDragAction; //设置标志位,是否是拖动操作,防止btn被频繁的响应
    
    2. BOOL值的与判断分别对应两种情况:
    - (void)titleClick:(UIButton *)button {    
        if (self.allowBtnCilck || self.isDragAction) {
            /*保证拖动事件和按钮点击事件互不干扰*/
            if (!self.isDragAction) {
                self.allowBtnCilck = NO;
                /*防止按钮频繁点击,导致ScrollView内容错位*/
                self.contentView.userInteractionEnabled = NO;
                [self performSelector:@selector(allowBtnCilckAgain) withObject:nil afterDelay:0.3];
            }
            self.isDragAction  = NO;
    
          //下面的是按钮响应的原先处理操作
           ..........................................
           ..........................................        
          }
    }
    
    - (void)allowBtnCilckAgain {
        self.allowBtnCilck = YES;
        self.contentView.userInteractionEnabled = YES;
    }
    
    1)频繁切换点击标题按钮: self.allowBtnCilck 做一个延时处理;
    2) 频繁左右滑动ScrollView:

    (1)在scrollView开始被拖动的时候,将 userInteractionEnabled 响应关掉:

    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
        /*配对使用,开始拖动时候,不再允许响应*/
        self.contentView.userInteractionEnabled = NO;
    }
    

    (2)在scrollView动画结束的时候,将 userInteractionEnabled 响应打开:

    - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
        ............................
        ............................
        /*配对使用,滑动结束的时候,允许响应*/
        self.contentView.userInteractionEnabled = YES;
    }
    
    3) 交叉情况:如果没有 self.isDragAction 标志位,左右滑动时,会触发0.3秒的计时器,操作过快会造成整个控制器的偏移,所以加上它,手动侧滑时,忽略掉计时器。
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
        [self scrollViewDidEndScrollingAnimation:scrollView];
       ...................................
       ...................................
        self.isDragAction = YES;
        [self titleClick:self.titlesView.subviews[index]];
    }
    

    相关文章

      网友评论

        本文标题:iOS scrollView 左右滑动 内容错位

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