代理模式是OC编程中比较常见的一种设计模式,那么什么叫做代理模式呢?举个简单的例子,你委托中介租房子,中介就成了你的代
理人,你会把你对于房子的一些要求告诉他,中介想要做成你这笔生意,那么他就必须要根据你的要求去帮你找房子,找房子的任务就全权委托给了中介,而你就不没必要去管中介怎么找房子或者找了多少房子。那么这就构成了一个简单的代理模式。
那么以UIScrollView中的缩放属性为例,来说说代理模式在编程中的具体实现。
通过查看UIScrollView的属性,我们可以很轻松的找到:
<span style="font-size:14px;">@property(nonatomic) CGFloat minimumZoomScale; // default is 1.0</span>
<span style="font-size:14px;">@property(nonatomic) CGFloat maximumZoomScale; // default is 1.0. must be > minimum zoom scale to enable zooming</span>
这两条属性分别是用来缩小和放大UIScrollView的,ok,那我们直接
<span style="font-size:14px;">self.scrollView.maximumZoomScale = 2.0;
self.scrollView.minimumZoomScale = 0.5;</span>
Command+R运行一下,发现并没有什么用!那这又是为什么呢?原因就是使用这两条属性,必须要让ViewController继承UIScrollView的代理,通过代理去实现缩小和放大的功能。
首先:
<span style="font-size:14px;">@interface ViewController ()<UIScrollViewDelegate></span>
然后在ViewDidLoad中:
<span style="font-size:14px;">self.scrollView.delegate = self;
</span>
然后调用委托中的:
<span style="font-size:14px;">/**
* 当用户使用捏合手势的时候会调用
*
* @return 返回的控件就是需要进行缩放的控件
*/
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
NSLog(@"----开始缩放");
return self.imageView;//imageView是ScrollView的子view
}</span>
最后再使用刚刚的两个属性,即可实现缩小与放大的功能。
其实不难看出,OC中的代理很类似于Java中的接口,都只是定义了一些没有实现的方法,而实现则是根据其他类的具体要求而定的。