1.很多时候,我们想在UIscrollView正在滚动或者滚动到某个位置或者停止滚动时做一些特定的操作。
2.想要完成上述的功能,前提条件是能够监听到UIscrollView的整个滚动过程。
3.当UIScrollView发生一系列的滚动操作时,会自动通知它的代理(delegate)对象,给它的代理发送相应的消息,让代理得知它的滚动情况。
4.UIScrollView和delegate的通信如下图所示
5.若想成为UIScrollView的代理,则必须遵守UIScrollView的协议。简而言之,成为delegate的条件:UIScrollView将delegate需要实现的方法都定义在UIScrollViewDelegate协议中,因此想成为UIScrollView的delegate,就必须遵守UIScrollViewDelegate协议,然后实现协议中对应的方法,就可以监听UIScrollView的滚动过程了。
6.UIScrollView和控制器
(1)一般情况下,把UIScrollView所在的控制器设置成UIScrollView的delegate。
(2)设置控制器为UIScrollView的delegate有2种方法:一是通过代码的方式(self就是控制器)self.scrollView.delegate = self.
二是通过storyboard的拖线。
7.代理的用途:
(1)监听的思想:让一个对象A监听另一个对象B的状态。(则A为B的代理)
(2)通知的思想:一个对象B状态发生了改变(做了某些事情),想通知另一个对象A
8.UIScrollView的缩放原理
(1)当用户在UIScrollView上使用了捏合手势时,UIScrollView会给代理发送一条消息,询问代理自己要缩放内部的哪一个子控件。
(2)当用户在UIScrollView上使用捏合手势时,UIScrollView会调用代理的viewForZoomingInScrollView:方法,这个方法返回的控件就是需要进行缩放的控件。
9.UIScrollView代理的一些常用方法(引用 http://ios.9tech.cn/news/2013/0923/28994.html)
// 返回一个需要放大或者缩小的视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
}
// 开始放大或者缩小
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:
(UIView *)view
{
}
// 缩放结束时
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{
}
// 视图已经放大或缩小
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
NSLog(@"scrollViewDidScrollToTop");
}
*/
// 是否支持滑动至顶部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
return YES;
}
// 滑动到顶部时调用该方法
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
NSLog(@"scrollViewDidScrollToTop");
}
// scrollView 已经滑动
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"scrollViewDidScroll");
}
// scrollView 开始拖动
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
NSLog(@"scrollViewWillBeginDragging");
}
// scrollView 结束拖动
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
NSLog(@"scrollViewDidEndDragging");
}
// scrollView 开始减速(以下两个方法注意与以上两个方法加以区别)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
NSLog(@"scrollViewWillBeginDecelerating");
}
// scrollview 减速停止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSLog(@"scrollViewDidEndDecelerating");
}