當用戶在 UIScrollView 上使用捏合手勢時, UIScrollView 會給 UIScrollViewDelegate 協議發送一條消息,並調用代理的 viewForZoomingInScrollView: 方法,該方法返回的控件就是須要進行縮放的控件。html
實現縮放功能的步驟:spa
1)讓控制器遵照 UIScrollView 的代理協議 UIScrollViewDelegate ;代理
2)爲 UIScrollView 設置代理, _scrollView.delegate = self; ;調試
3)調用代理方法 viewForZoomingInScrollView: ,返回須要實現縮放功能的子控件;code
4)設置縮放的範圍, _scrollView.maximumZoomScale、_scrollView.minimumZoomScale 。htm
新建一個Single View Application,讓 ViewController 類遵照 UIScrollViewDelegate 協議,並在類擴展中添加 UIScrollView 和 UIImageView 屬性,以下:對象
1 //ViewController.m 2 @interface ViewController () 3 { 4 UIScrollView *_scrollView; 5 UIImageView *_imageView; 6 }
重載 viewDidLoad 方法以下:blog
1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 //添加UIScrollView 4 _scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; 5 [self.view addSubview:_scrollView]; 6 7 //添加圖片 8 UIImage *image = [UIImage imageNamed:@"beauty4.jpg"]; 9 //initWithImage:方法建立的_imageView的寬高和圖片同樣 10 _imageView = [[UIImageView alloc] initWithImage:image]; 11 [_scrollView addSubview:_imageView]; 12 _scrollView.contentSize = image.size; 13 14 //設置代理對象 15 _scrollView.delegate = self; 16 //設置最大縮小放大比例 17 _scrollView.maximumZoomScale = 2.0; 18 _scrollView.minimumZoomScale = 0.5; 19 }
實現 viewForZoomingInScrollView: 方法,告訴 _scrollView _imageView 是須要縮放的子控件:圖片
1 //ViewController.m 2 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 3 NSLog(@"實現圖片的縮放"); 4 return _imageView; 5 }
上述代碼下劃線部分,實例化 UIImageView 的方法可替換爲:開發
1 _imageView = [[UIImageView alloc] init]; 2 UIImage *image = [UIImage imageNamed:@"beauty4.jpg"]; 3 _imageView.image = image; 4 _imageView.frame = CGRectMake(0, 0, image.size.width, image.size.height);
跟縮放相關的其餘代理方法:
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view 縮放完畢的時候調用。
- (void)scrollViewDidZoom:(UIScrollView *)scrollView 正在縮放的時候調用。
在原代碼之中添加以下代碼:
1 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view { 2 NSLog(@"%s", __FUNCTION__); 3 } 4 5 - (void)scrollViewDidZoom:(UIScrollView *)scrollView { 6 NSLog(@"%s", __FUNCTION__); 7 }
在真機上調試,使用捏合手勢放大圖片,輸出以下:
1 2016-02-16 16:35:07.780 WJQScrollViewDemo[189:3549] -[ViewController viewForZoomingInScrollView:] 2 2016-02-16 16:35:07.781 WJQScrollViewDemo[189:3549] -[ViewController scrollViewWillBeginZooming:withView:] 3 2016-02-16 16:35:07.798 WJQScrollViewDemo[189:3549] -[ViewController scrollViewDidZoom:]