UIScrollView的代理(delegate)

本文介绍了如何在iOS开发中利用UIScrollView的代理(delegate)监听滚动事件。内容包括:成为UIScrollView代理的条件,如何设置控制器为UIScrollView的代理,以及代理的用途,特别是用于监听和通知的机制。同时,讨论了UIScrollView的缩放原理,代理方法`viewForZoomingInScrollView:`在捏合手势缩放中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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"); 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值