一、缩放

1.简单说明:

有些时候,我们可能要对某些内容进行手势缩放,如下图所示

UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理。也就是说,要完成缩放功能的话,只需要将需要缩放的内容添加到UIScrollView中

2.缩放原理

当用户在UIScrollView身上使用捏合手势时,UIScrollView会给代理发送一条消息,询问代理究竟要缩放自己内部的哪一个子控件(哪一块内容)

当用户在UIScrollView身上使用捏合手势时,UIScrollView会调用代理的viewForZoomingInScrollView:方法,这个方法返回的控件就是需要进行缩放的控件。

二、实现缩放功能

1.代码示例:

 1 #import "YYViewController.h"2 3 @interface YYViewController () <UIScrollViewDelegate>4 {5     UIScrollView *_scrollview;6     UIImageView *_imageview;7 }8 @end9
10 @implementation YYViewController
11
12 - (void)viewDidLoad
13 {
14     [super viewDidLoad];
15
16     //1添加 UIScrollView
17     //设置 UIScrollView的位置与屏幕大小相同
18     _scrollview=[[UIScrollView alloc]initWithFrame:self.view.bounds];
19     [self.view addSubview:_scrollview];
20
21     //2添加图片
22     //有两种方式
23     //(1)一般方式
24 //    UIImageView  *imageview=[[UIImageView alloc]init];
25 //    UIImage *image=[UIImage imageNamed:@"minion"];
26 //    imageview.image=image;
27 //    imageview.frame=CGRectMake(0, 0, image.size.width, image.size.height);
28
29     //(2)使用构造方法
30     UIImage *image=[UIImage imageNamed:@"minion"];
31     _imageview=[[UIImageView alloc]initWithImage:image];
32     //调用initWithImage:方法,它创建出来的imageview的宽高和图片的宽高一样
33     [_scrollview addSubview:_imageview];
34
35     //设置UIScrollView的滚动范围和图片的真实尺寸一致
36     _scrollview.contentSize=image.size;
37
38
39     //设置实现缩放
40     //设置代理scrollview的代理对象
41     _scrollview.delegate=self;
42     //设置最大伸缩比例
43     _scrollview.maximumZoomScale=2.0;
44     //设置最小伸缩比例
45     _scrollview.minimumZoomScale=0.5;
46
47 }
48
49 //告诉scrollview要缩放的是哪个子控件
50 -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
51 {
52     return _imageview;
53 }
54
55 @end

2.代码说明

实现缩放功能的4个步骤

(1)为scrollview设置代理(self)

(2)让控制器遵守scrollview的代理协议

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

(4)设置缩放的范围(最大和最小比例)

3.思路:

a.需要告诉scrollview要缩放的时哪一个子控件,这里为scrollview内部的imageview控件

b.谁来告诉scrollview缩放哪一个控件?代理

三、补充知识

两种实例化UIImageView的方法:

第一种:

UIImageView  *imageview=[[UIImageView alloc]init];

UIImage *image=[UIImage imageNamed:@"minion"];

imageview.image=image;

imageview.frame=CGRectMake(0, 0, image.size.width, image.size.height);

第二种:

UIImage *image=[UIImage imageNamed:@"minion"];

_imageview=[[UIImageViewalloc]initWithImage:image];

调用initWithImage:方法,它创建出来的imageview的宽高和图片的宽高一样

[_scrollviewaddSubview:_imageview];

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

缩放完毕的时候调用

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view

正在缩放的时候调用

- (void)scrollViewDidZoom:(UIScrollView *)scrollView

转载于:https://www.cnblogs.com/shuxiachahu123/p/4992628.html

UIScrollView 手势缩放相关推荐

  1. pdfh5.js 基于pdf.js和jQuery,web/h5/移动端PDF预览手势缩放插件。

    pdfh5.js 基于pdf.js和jQuery,web/h5/移动端PDF预览手势缩放插件. 注意:本地绝对路径地址不能加载,跨域问题用代理或者服务端解决. svg模式渲染存在缺陷,只能渲染普通pd ...

  2. android手势放大自动还原,ImageView通过matrix实现手势缩放,放大,缩小 ,移动

    转载自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/1023/1579.html 测试有效 关于ImageView的手势缩放, ...

  3. js实现移动端图片预览:手势缩放, 手势拖动,双击放大...

    原文:js实现移动端图片预览:手势缩放, 手势拖动,双击放大... 前言 本文将介绍如何通过js实现移动端图片预览,包括图片的 预览模式,手势缩放,手势拖动,双击放大等基本功能: 扫码查看示例效果: ...

  4. Qt QWidget实现手势缩放和平移(二)

    上一篇文章中讲到了QWidget实现手势缩放和平移,通过QGestureEvent来捕捉手势操作,但是这种方式不一定能通用,比如像教学用的电子白板上,是红外触控感应,并不能通过QGestureEven ...

  5. android触屏对焦_Android相机开发(五): 触摸对焦,触摸测光,二指手势缩放

    Android Camera Develop: touch to focus, touch to metering, double finger touch to zoom 概述 本篇在(四)的基础上 ...

  6. 在c 语言里如何制作滑动图片大小,[教程]教你在微信小程序中实现手势缩放图片...

    在小程序中,image 组件的 mode 有 12 种,其中只有三种是缩放模式.而在这三种之中,只有 aspectFit 模式可以等比例缩放图片,并显示完整的图片.此模式是保证图片长边完整地显示出来, ...

  7. vue移动端pdf在线预览,并实现手势缩放、移动

    通常我们会遇到ios手机不能下载文件的问题,那是因为苹果手机的拦截机制,这时我们只能通过别的方法来解决问题,我这里的解决方法是直接实现在线预览 pdf预览跟图片预览不同,pdf可能会有多张,而图片只有 ...

  8. Android相机开发: 触摸对焦,触摸测光,二指手势缩放

    转自此处 概述 本篇在(四)的基础上继续对相机APP的功能进行增强.触摸对焦,就是在屏幕上点击某个点,相机就以此点内容进行对焦,保证此点最清晰:触摸测光,就是在屏幕上点击某个点,相机调整曝光亮度,保证 ...

  9. Android之GestureDetector-简单手势操作及通过手势缩放图片,我离职后面试收割小米等大厂offer

    Android提供了手势检测,并为其提供了相应的监听器,需要用到的类是GestureDetector,其实例代表了一个手势检测器,创建GestureDetector时需要传入一个GestureDete ...

最新文章

  1. UI设计师必备技能,看看你都学会了吗?
  2. python基础(十二):正则、re模块、贪婪和非贪婪
  3. python优雅写法
  4. Linux下程序包管理工具RPM
  5. RabbitMQ基本概念
  6. vs code 快捷键设置 2018
  7. response设置响应头
  8. facebook 开源_Facebook开源主管开放
  9. LintCode_44 最小子数组
  10. Contact Manager Web API 示例[1]CRUD 操作
  11. 炒股应只做确定的上涨
  12. 关系型数据库的ACID特性
  13. 怎么用一个计算机控制两个屏幕,一台电脑带2个显示器,这样操作就对了,双屏显示操作更方便...
  14. java简历中的项目经验怎么写_java软件工程师简历中项目经验怎么写?
  15. parrot linux 输入法,nur kirguzguq
  16. alfafile中转站免费_免费、不限速的文件中转站or网盘
  17. python如何设置窗口为活动窗口
  18. 华为鸿蒙新闻发布会,华为鸿蒙2.0、EMUI 11齐发 打通手机、电视、PC全平台
  19. 什么是天灾人祸,天灾是智商比较低,什么是人祸,人祸就是自己还不努力
  20. 分享一款自用的强悍高清录制软件Bandicam4.3.4.1503中文便携特别版

热门文章

  1. 计算机学院品牌活动,安阳师范学院 计算机学院成功举办校园文化品牌活动“一月一赛”之三笔字比赛...
  2. 刀片服务器虚拟化哪家好,刀片服务器TOP5 细数虚拟化时代利器
  3. github ssh 配置_怎么给Git配置多个SSH Key?
  4. 计算机系统注册表的由来,计算机系统注册表
  5. 开发中常用的linux语句,MySQL开发中常用的查询语句总结
  6. Android接入unityads广告,Unity Ads胡敏:开发者如何通过广告获取成功
  7. java中paint_java中paint()的具体用法是什么?
  8. python 单例类
  9. sqlalchemy 事务
  10. SQLAlchemy Tutorial