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]];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,555评论 1 14
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,781评论 25 709
  • 平静的叙述,波涛的情感。没有刻意渲染悲情,却让人久久不能平静。当看到老人们不愿回忆的痛苦表情,说到一半不能自己,话...
    琢磨小可阅读 191评论 0 0
  • 大禹治水,一十三年,三过家门,而不得入。车舟不停,奔波东西,披九山,通九泽,决九河,定九州,分民以食,迁民至丰,如...
    化浊阅读 519评论 0 0