当scrollView 快速拖动的时候 scrollViewWillBeginDragging 执行多次 scrollViewDidEndDecelerating 才执行一次

我使用三个视图来实现轮播的时候遇到一个问题,就是快速拖动的时候,拖到最右边就拖不动的问题,

- (UIScrollView *)contentScrollView
{
    if (!_contentScrollView) {
        _contentScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds))];
        _contentScrollView.contentSize = CGSizeMake(3 * CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds));
        _contentScrollView.delegate = self;
        _contentScrollView.pagingEnabled = YES;
        _contentScrollView.showsHorizontalScrollIndicator = NO;
        _contentScrollView.backgroundColor = [UIColor redColor];
    }
    return _contentScrollView;
}

在这里插入图片描述
后来发现,如果双手快速交替拖动的时候,scrollViewDidEndDecelerating
方法还没有执行,导致我们的scrollView还没有偏移到中间位置
如图所示:
请添加图片描述

开始拖动的位置并没有在CGRectGetWidth(scrollView.bounds),这时候我们继续拖动的时候,就拖不动了,因为已经到边了
这时候,就需要我们在 scrollViewWillBeginDragging
中将scrollViewDidEndDecelerating 中需要做还没有做的任务
做了,但是这就会有另外一个问题
就是我们 在scrollViewWillBeginDragging 做了 scrollViewDidEndDecelerating
需要做的,那么 scrollViewDidEndDecelerating 再做一遍
,岂不是重复操作,导致重复增加或者重复减小吗
,经过测试,是不会的,当我们快速拖动的时候,

多个 连续执行的 scrollViewWillBeginDragging 并不会导致
执行相同数量的 scrollViewDidEndDecelerating方法,

只会在最后一次 停止减速的时候 执行scrollViewDidEndDecelerating

这样就保证了我们代码执行的正确

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值