iPhone开发之UIScrollView滚动组件的使用(六)通过代理实现手势缩放——(拖线实现)

来源:互联网 发布:sql identity_insert 编辑:程序博客网 时间:2024/05/18 00:11
-有些时候我们可能要对某些内容进行手势缩放
-UIScrollView不仅能滚动显示大量的内容,还能对其内容进行处理
-也就是说,要完成缩放功能,只需要将需要缩放的内容添加到UIScrollView。
1、大概步骤如下:
(1)拖拽一个UIScrollView
(2)向UIscrollView中添加内容(这里的内容就是指要进行缩放的内容(控件))
(3)通过代理监听缩放事件,在缩放事件中返回UIScrollView的某个子控件(这个子控件就是告诉UIScrollView对这个控件进行缩放)
(4)设置缩放比:最大能放大多少倍,最小能缩放百分之多少。

注意:UIScrollView一次只能对一个控件进行缩放,仅仅一个。

代理的工作过程如下图所示:


2、UIScrollView的缩放原理
当用户在UIScrollView身上使用捏合手势时,UIscrollView会发送给代理一条消息,询问代理究竟要缩放自己内部的哪一个控件(哪一块内)具体如下图:
3、实现缩放的具体步骤如下:
(一)添加UIScrollView,设置UIscrollView的宽和高与控制器大小一致。
(二)向UIscrollView中添加子控件UIImageView,设置图片,设置UIImageView的大小与图片的大小一致。
(三)设置UIscrollView的代理为当前控制器
(四)设置当前控制器遵守UIscrollViewDelegate代理协议
(五)在控制器中实现代理方法
-(UIView *)viewFormZoomingInScrollVIew:方法返回一个要缩放的子控件。
(六)在viewDidLoad中设置缩放比例
—— self.scrollView.maximumZoomScale = 2.0;
——self.scrollView.minimumZoomScale=0.4;
注意:UIscrollView一次只能缩放一个子控件,到底要缩放哪个子控件,UIScrollView要问代理,由代理方法决定,也就是说由用户决定(问代理的:viewFormZoomingForScrollView这个方法,该方法返回的控件就是scrollView要缩放的控件)


4、UIScrollViewDelegate协议中用于UIScrollView组件内部内容缩放的方法如下:
(1)- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;    这个方法是实现缩放必不可少的方法。
(2)- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view NS_AVAILABLE_IOS(3_2);
这个方法表示正在手势缩放
(1)- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale; 
这个方法在手势缩放完毕时会被调用。
注意:第一个方法在被执行前就会被调用,返回要进行缩放的子控件。告诉UIScrollView要缩放的是哪个控件。
5、当一个UIScrollView中有多个控件时,但是无法对每个每个控件都进行进行缩放,一个UIscrollView只能选择一个控件进行缩放。有以下问题需要注意:

—当一个控制器的view中有多个UIScrollView滚动控件时,就需要对每个UIScrollView设置不同的Tag值,代理中的viewForZoomingInScrollView方法就会根据传进参数的Tag值进行判断,分别为不同的UIScrollView控件返回一个不同的内容控件。

—在模拟器上进行手势缩放时,按住option键或Alt键,用鼠标移动进行缩放



过程步骤如下:

第一步:拖进图片资源并查看分辨率即大小


第二步:拖进一个UIScrollView组件,再拖进UIScrollView组件一个UIImageView组件并进行设置


第三步:关闭自动布局:


第四步:将组件拖线为控制器类添加属性


第五步:为UIScrollView组件设置代理为当前控制器(若为手动的话,就要添加协议并用self.scrollView.delegate=self)


第六步:进入协议复制控制手势缩放的方法到控制器.m文件进行编辑实现,

编辑控制器的.m文件如下:

////  ViewController.m//  拖线实现手势缩放////  Created by apple on 15/8/28.//  Copyright (c) 2015年 LiuXun. All rights reserved.//#import "ViewController.h"@interface ViewController ()@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;@property (weak, nonatomic) IBOutlet UIImageView *ImageView;@end@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];    self.scrollView.contentSize=self.ImageView.frame.size;self.scrollView.maximumZoomScale   =    2.0;    self.scrollView.minimumZoomScale    =   0.4;}- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{    NSLog(@"=======viewForZooming======");    return self.ImageView;}- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view NS_AVAILABLE_IOS(3_2){    NSLog(@"scrollViewBeginZooming..........");}- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{    NSLog(@"scrollVIewDidEndZooming.........");}@end
运行结果如下:



0 0