当用户在 UIScrollView 上使用捏合手势时, UIScrollView 会给 UIScrollViewDelegate 协议发送一条消息,并调用代理的 viewForZoomingInScrollView: 方法,该方法返回的控件就是需要进行缩放的控件。

  实现缩放功能的步骤:

1)让控制器遵守 UIScrollView 的代理协议 UIScrollViewDelegate ;

2)为 UIScrollView 设置代理, _scrollView.delegate = self; ;

3)调用代理方法 viewForZoomingInScrollView: ,返回需要实现缩放功能的子控件;

4)设置缩放的范围, _scrollView.maximumZoomScale、_scrollView.minimumZoomScale 。

实例

  新建一个Single View Application,让 ViewController 类遵守 UIScrollViewDelegate 协议,并在类扩展中添加 UIScrollView 和 UIImageView 属性,如下:

 //ViewController.m
@interface ViewController ()
{
UIScrollView *_scrollView;
UIImageView *_imageView;
}

  重载 viewDidLoad 方法如下:

 - (void)viewDidLoad {
[super viewDidLoad];
//添加UIScrollView
_scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:_scrollView]; //添加图片
UIImage *image = [UIImage imageNamed:@"beauty4.jpg"];
//initWithImage:方法创建的_imageView的宽高和图片一样
_imageView = [[UIImageView alloc] initWithImage:image];
[_scrollView addSubview:_imageView];
_scrollView.contentSize = image.size; //设置代理对象
_scrollView.delegate = self;
//设置最大缩小放大比例
_scrollView.maximumZoomScale = 2.0;
_scrollView.minimumZoomScale = 0.5;
}

  实现 viewForZoomingInScrollView: 方法,告诉 _scrollView  _imageView 是需要缩放的子控件:

 //ViewController.m
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
NSLog(@"实现图片的缩放");
return _imageView;
}

补充

  上述代码下划线部分,实例化 UIImageView 的方法可替换为:

 _imageView = [[UIImageView alloc] init];
UIImage *image = [UIImage imageNamed:@"beauty4.jpg"];
_imageView.image = image;
_imageView.frame = CGRectMake(, , image.size.width, image.size.height);

  跟缩放相关的其他代理方法:

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view  缩放完毕的时候调用。

- (void)scrollViewDidZoom:(UIScrollView *)scrollView  正在缩放的时候调用。

  在原代码之中添加如下代码:

 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {
NSLog(@"%s", __FUNCTION__);
} - (void)scrollViewDidZoom:(UIScrollView *)scrollView {
NSLog(@"%s", __FUNCTION__);
}

  在真机上调试,使用捏合手势放大图片,输出如下:

 -- ::07.780 WJQScrollViewDemo[:] -[ViewController viewForZoomingInScrollView:]
-- ::07.781 WJQScrollViewDemo[:] -[ViewController scrollViewWillBeginZooming:withView:]
-- ::07.798 WJQScrollViewDemo[:] -[ViewController scrollViewDidZoom:]

参考博客:iOS开发UI篇—UIScrollView控件实现图片缩放功能

代码下载:http://vdisk.weibo.com/s/DiY98QyXCNtD9

iOS开发基础-UIScrollView实现图片缩放的更多相关文章

  1. iOS开发基础-UIScrollView基础

     普通的 UIView 不具备滚动功能,不能显示过多的内容.UIScrollView 是一个能够滚动的视图控件,可用来展示大量的内容.  UIScrollView 的简单使用: 1)将需要展示的内容添 ...

  2. iOS开发基础-图片切换(4)之懒加载

    延续:iOS开发基础-图片切换(3),对(3)里面的代码用懒加载进行改善. 一.懒加载基本内容 懒加载(延迟加载):即在需要的时候才加载,修改属性的 getter 方法. 注意:懒加载时一定要先判断该 ...

  3. iOS开发基础-图片切换(3)之属性列表

    延续:iOS开发基础-图片切换(2),对(2)里面的代码用属性列表plist进行改善. 新建 Property List 命名为 Data 获得一个后缀为 .plist 的文件. 按如图修改刚创建的文 ...

  4. iOS开发基础-图片切换(2)之懒加载

    延续:iOS开发基础-图片切换(1),对(1)里面的代码进行改善. 在 ViewController 类中添加新的数组属性:  @property (nonatomic, strong) NSArra ...

  5. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  6. iOS开发基础-九宫格坐标(5)

    继续在iOS开发基础-九宫格坐标(4)的基础上进行优化. 一.改进思路 1)iOS开发基础-九宫格坐标(4)中 viewDidLoad 方法中的第21.22行对控件属性的设置能否拿到视图类 WJQAp ...

  7. iOS开发基础-九宫格坐标(4)

    对iOS开发基础-九宫格坐标(3)的代码进行进一步优化. 新建一个 UIView 的子类,并命名为 WJQAppView ,将 appxib.xib 中的 UIView 对象与新建的视图类进行关联. ...

  8. iOS开发基础-九宫格坐标(3)之Xib

    延续iOS开发基础-九宫格坐标(2)的内容,对其进行部分修改. 本部分采用 Xib 文件来创建用于显示图片的 UIView 对象. 一.简单介绍  Xib 和 storyboard 的比较: 1) X ...

  9. iOS开发基础-九宫格坐标(2)之模型

    在iOS开发基础-九宫格(1)中,属性变量 apps 是从plist文件中加载数据的,在 viewDidLoad 方法中的第20行.26行中,直接通过字典的键名来获取相应的信息,使得 ViewCont ...

随机推荐

  1. 【Node.js】利用node.js搭建服务器并访问静态网页

    node.js是一门服务端的语言,下面讲讲如何利用node.js提供给我们的api来搭建服务器,并且访问静态网页 项目结构如下 ------------------------------------ ...

  2. 使用表类型(Table Type-SqlServer)实现百万级别的数据一次性毫秒级别插入

    使用表类型(Table Type)实现百万级别的数据一次性插入 思路 1 创建表类型(TaBleType)         2 创建添加存储过程         3 使用C#语言构建一个DataTab ...

  3. php 时间戳最大值

    今天遇到一个bug,获取有效期值错误,在定位跟踪后发现有效期有值,如下: $expireDate = ; //2037-08-16 09:30:48 但是在该时间戳的基础上加上1 year后, $ex ...

  4. 数据结构(java版)学习笔记(三)——线性表之单链表

    单链表的优点: 长度不固定,可以任意增删. 单链表的缺点: 存储密度小,因为每个数据元素,都需要额外存储一个指向下一元素的指针(双链表则需要两个指针). 要访问特定元素,只能从链表头开始,遍历到该元素 ...

  5. CA证书理解?CA证书的作用?

    CA证书顾名思义就是由CA(Certification Authority)机构发布的数字证书.要对CA证书完全理解及其作用,首先要理解SSL.SSL(security sockets layer,安 ...

  6. Java发送电子邮件

    转自 https://blog.csdn.net/xietansheng/article/details/51673073 纯代码, 详情请至原文查看 需要一个javamail的jar包 以下为实现代 ...

  7. GeoServer安装配置

    需安装文件 1.安装jdk 2.安装GeoServer: (1).在安装GeoServer前,需要安装java运行环境,点击文件夹内的jdk安装文件,选择jdk安装路径进行安装:直到安装完成. (2) ...

  8. Approval Process 在 Apex 中的使用

    Approval Process(批准过程)简介 批准过程是一个复杂的业务过程.详细的内容可以参考官方文档. 英文版 中文版 官方trailhead模块 在Apex中调用Approval Proces ...

  9. OpenCL:图像处理基础note

    使用图像对象的理由 虽然对于图像也可以把它的像素数据当做一般的缓存数据来处理,但是如果把它当做图像来处理有如下好处: 在GPU中,图像数据是保存在特殊的全局内存中,即纹理内存,它和一般的全局内存不相同 ...

  10. java之网络爬虫介绍

    文章大纲 一.网络爬虫基本介绍二.java常见爬虫框架介绍三.WebCollector实战四.项目源码下载五.参考文章   一.网络爬虫基本介绍 1. 什么是网络爬虫   网络爬虫(又被称为网页蜘蛛, ...