由apple sample code "LazyTab
LazyTableImages是苹果官方推出来的一个经典sample code,里面的代码编写风格和设计思路值得学习
今天来说的是在lazyTableImages里出现的两个scrollView代理方法,他们的作用在于当tableView停止滑动时,进行调用加载网络图片:
(void)scrollViewDidEndDragging:(UIScrollView*)scrollViewwillDecelerate:(BOOL)decelerate {
if(!decelerate) { }
}
(void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView;
对于第二个方法,我们一般会接触得多一些,意思是当scrollView停止减速动画时,会触发该方法;
第一个方法,从方法名我们可以知道,是当我们停止拖动时触发,而后面declelerate参数是代表什么意思呢?我们看看苹果官方怎么说
意思是我们手指停止拖动,离开屏幕会被调用,当手指停止拖动时,如果scrollView依然会有滑动,那么decelerate参数为YES。
那么我们会不会有这么个疑问呢?
我们在LazyTableImages这里例子里用 - (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView;不就够了?干嘛还要在 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollViewwillDecelerate:(BOOL)decelerate 这个方法里判断decelerate是否为NO呢?
通过断点调试,我们会发现:
如果你快速滑动tableView,然后松开,tableView依然继续滑动,这个时候会先调用
(void)scrollViewDidEndDragging:(UIScrollView*)scrollViewwillDecelerate:(BOOL)decelerate ,此时的参数decelerate为YES。
当停止滑动时,会触发
- (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView(这种情况下,我们有scrollViewDidEndDecelerating方法处理就足够了)
但是,当你手指慢慢拖动,然后松开,此时tableView没有继续滑动,那么此时只会调用
(void)scrollViewDidEndDragging:(UIScrollView*)scrollViewwillDecelerate:(BOOL)decelerate
而且此时的参数decelerate为NO。并不会调用- (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView这个方法。
快速滑动和慢慢拖动,这两种动作在日常使用时,基本都是会用到的,所以需要在这两种方法里都进行处理!