iOS scrollView 左右滑动 内容错位

环境: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]];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值