我使用三个视图来实现轮播的时候遇到一个问题,就是快速拖动的时候,拖到最右边就拖不动的问题,
- (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
这样就保证了我们代码执行的正确