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

-有些时候我们可能要对某些内容进行手势缩放
-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
运行结果如下:



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