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 ...
随机推荐
- 流式大数据计算实践(4)----HBase安装
一.前言 1.前面我们搭建好了高可用的Hadoop集群,本文正式开始搭建HBase 2.HBase简介 (1)Master节点负责管理数据,类似Hadoop里面的namenode,但是他只负责建表改表 ...
- 痞子衡嵌入式:飞思卡尔Kinetis开发板OpenSDA调试器那些事(上)- 背景与架构
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis MCU开发板板载OpenSDA调试器(上篇). 众所周知,嵌入式软件开发几乎离不开调试器,因为写一个稍有代码规模 ...
- mybatis-generator自动生成代码插件使用详解
mybatis-generator是一款在使用mybatis框架时,自动生成model,dao和mapper的工具,很大程度上减少了业务开发人员的手动编码时间,今天自己研究了一下,也分享一下使用心得供 ...
- WPF 窗口大小自适应
在设置桌面不同分辨率以及较大DPI下,窗口如何显示的问题. 方案一 设置窗口最大值和最小值显示 通过对比当前屏幕的可显示区域,将窗口高宽最大值和最小值,设置为窗口的实际高宽(此例中仅设置高度) 界面设 ...
- C++系列总结——构造与析构
前言 在使用资源前,我们需要做一些准备工作保证资源能正常使用,在使用完资源后,我们需要做一些扫尾工作保证资源没有泄露,这就是构造与析构了,这和编程语言是无关的,而是使用资源的一种方式.C++只不过是把 ...
- Ajax请求中的async:false/true(同步/异步)的作用
async. 默认是true,即为异步方式,$.Ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.Ajax里的success方法,这时候执行的是两个线程.若要将其设置为fa ...
- React常见的15个问题
在 jsComplete,我们管理一个专门用于帮助编程学习者 slack 帐户.我们常常会收到一些有趣的问题,但大多数问题都是常见问题. 我创建这个资源为了帮助 React.js学习者遇到这些常见的问 ...
- 2019-02-20 在PyPI测试平台发布Python包
参考Packaging Python Projects, 源码在nobodxbodon/test-package-for-pypi 包名/__init__.py: 测试变量 = "值&quo ...
- 小米Max 2获取ROOT超级权限的经验
小米Max 2有么好方法开通了root权限?大家都了解,安卓手机有root权限,如果手机开通了root相关权限,能够实现更完美的功能,打比方大家企业的营销部门的同事,使用某些营销工具都需要在root权 ...
- MongoDB分片 在部署和维护管理 中常见事项的总结
分片(sharding)是MongoDB将大型集合分割到不同服务器(或者说集群)上所采用的方法,主要为应对高吞吐量与大数据量的应用场景提供了方法. 和既有的分库分表.分区方案相比,MongoDB的最大 ...