iOS开发基础-UIScrollView实现图片缩放
当用户在 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实现图片缩放的更多相关文章
- iOS开发基础-UIScrollView基础
普通的 UIView 不具备滚动功能,不能显示过多的内容.UIScrollView 是一个能够滚动的视图控件,可用来展示大量的内容. UIScrollView 的简单使用: 1)将需要展示的内容添 ...
- iOS开发基础-图片切换(4)之懒加载
延续:iOS开发基础-图片切换(3),对(3)里面的代码用懒加载进行改善. 一.懒加载基本内容 懒加载(延迟加载):即在需要的时候才加载,修改属性的 getter 方法. 注意:懒加载时一定要先判断该 ...
- iOS开发基础-图片切换(3)之属性列表
延续:iOS开发基础-图片切换(2),对(2)里面的代码用属性列表plist进行改善. 新建 Property List 命名为 Data 获得一个后缀为 .plist 的文件. 按如图修改刚创建的文 ...
- iOS开发基础-图片切换(2)之懒加载
延续:iOS开发基础-图片切换(1),对(1)里面的代码进行改善. 在 ViewController 类中添加新的数组属性: @property (nonatomic, strong) NSArra ...
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- iOS开发基础-九宫格坐标(5)
继续在iOS开发基础-九宫格坐标(4)的基础上进行优化. 一.改进思路 1)iOS开发基础-九宫格坐标(4)中 viewDidLoad 方法中的第21.22行对控件属性的设置能否拿到视图类 WJQAp ...
- iOS开发基础-九宫格坐标(4)
对iOS开发基础-九宫格坐标(3)的代码进行进一步优化. 新建一个 UIView 的子类,并命名为 WJQAppView ,将 appxib.xib 中的 UIView 对象与新建的视图类进行关联. ...
- iOS开发基础-九宫格坐标(3)之Xib
延续iOS开发基础-九宫格坐标(2)的内容,对其进行部分修改. 本部分采用 Xib 文件来创建用于显示图片的 UIView 对象. 一.简单介绍 Xib 和 storyboard 的比较: 1) X ...
- iOS开发基础-九宫格坐标(2)之模型
在iOS开发基础-九宫格(1)中,属性变量 apps 是从plist文件中加载数据的,在 viewDidLoad 方法中的第20行.26行中,直接通过字典的键名来获取相应的信息,使得 ViewCont ...
随机推荐
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本新增新的角色授权管理界面效率更高、更规范
角色授权管理模块主要是对角色的相应权限进行集中设置.在角色权限管理模块中,管理员可以添加或移除指定角色所包含的用户.可以分配或授予指定角色的模块(菜单)的访问权限.可以收回或分配指定角色的操作(功能) ...
- linux 防火墙详细介绍
1.其实匹配扩展中,还有需要加-m引用模块的显示扩展,默认是隐含扩展,不要使用 -m状态检测的包过滤-m state --state {NEW,ESTATBLISHED,INVALID,R ...
- Servlet+Tomcat总结
Tomcat的缺省端口是多少,怎么修改 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 4.在server.xml ...
- ASP.NET Core 2.1 : 十一. 如何在后台运行一个任务
在大部分程序中一般都会需要用到后台任务, 比如定时更新缓存或更新某些状态.(ASP.NET Core 系列目录) 一.应用场景 以调用微信公众号的Api为例, 经常会用到access_token,官方 ...
- REST API设计指导——译自Microsoft REST API Guidelines(四)
前言 前面我们说了,如果API的设计更规范更合理,在很大程度上能够提高联调的效率,降低沟通成本.那么什么是好的API设计?这里我们不得不提到REST API. 关于REST API的书籍很多,但是完整 ...
- [七]JavaIO之 PipedInputStream 和 PipedInputStream
管道简介
- Django学习笔记(6)——Form表单
知识储备:HTML表单form学习 表单,在前端页面中属于最常见的一个东西了.基本上网站信息的提交都用到了表单,所以下面来学习Django中优雅的表单系统:Form 表单的主要作用是在网页上提供一个图 ...
- 权限管理系统之LayUI实现页面增删改查和弹出层交互
由于对LayUI框架不太熟悉,昨天抽空看了下LayUI的文档,今天在网上找了使用LayUI进行增删改查相关内容,自己照葫芦画了个瓢,画瓢部分不是很难,主要是下午遇到了一个弹出层的问题耗时比较久. 同一 ...
- Java集合类源码解析:ArrayList
目录 前言 源码解析 基本成员变量 添加元素 查询元素 修改元素 删除元素 为什么用 "transient" 修饰数组变量 总结 前言 今天学习一个Java集合类使用最多的类 Ar ...
- [翻译] Oracle Database 12c 新特性Multitenant
译自官方白皮书http://www.oracle.com/technetwork/database/plug-into-cloud-wp-12c-1896100.pdf,包含新的云计算相关技术的介绍. ...