图片的缩放

一:Pinch手势对图片进行缩放。即用两根手指往不同方向拖拉照片,照片会被缩小或放大。

我理解的原理:等比缩放

先看如下关键代码:

1.初始化参数

- (void)viewDidLoad

{

[superviewDidLoad];

lastDistance = 0.0;

imageStartHeight = self.scaleImage.frame.size.height;

imageStartWidth = self.scaleImage.frame.size.width;

}

2.缩放操作

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

CGPoint point1; //Point

CGPoint point2;

CGFloat sub_x; //两手指间的 X距离

CGFloat sub_y;//两手指间的 Y距离

CGFloat currentDistance; //当前两手机间的距离

CGRect imageFrame; //获得活动范围的frame

NSArray *touchArray = [[event allTouches]allObjects];

if ([touchArray count] >= 2) {

point1 = [[touchArrayobjectAtIndex:0]locationInView:self.view];

point2 = [[touchArrayobjectAtIndex:1]locationInView:self.view];

sub_x = point1.x-point2.x;

sub_y = point1.y-point2.y;

currentDistance =sqrtf(sub_x * sub_x + sub_y * sub_y);

if (lastDistance >0)

{

imageFrame =self.scaleImage.frame;

if (currentDistance > lastDistance +2)

{

//                NSLog(@"放大");

imageFrame.size.width +=10;

if (imageFrame.size.width >1000)

{

imageFrame.size.width =1000;

}

lastDistance = currentDistance;

}

if (currentDistance < lastDistance -2)

{

//                NSLog(@"缩小");

imageFrame.size.width -=10;

if (imageFrame.size.width <50)

{

imageFrame.size.width =50;

}

lastDistance = currentDistance;

}

NSLog(@"currentDistance :%f  lastDistance : %f",currentDistance,lastDistance);

if (currentDistance == lastDistance) {

imageFrame.size.height =imageStartHeight*imageFrame.size.width/imageStartWidth;

float addwidth = imageFrame.size.width -self.scaleImage.frame.size.width;

float addheight = imageFrame.size.height -self.scaleImage.frame.size.height;

self.scaleImage.frame =CGRectMake(imageFrame.origin.x - addwidth/2.0f, imageFrame.origin.y - addheight/2.0f, imageFrame.size.width, imageFrame.size.height);

}

}

else{

lastDistance = currentDistance;

}

}

}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

lastDistance = 0;

}

其实他的关键所在就在于:判断两手指间的距离,当大于一定的距离的时候就对图片的frame进行等比缩放,以达到缩放的目的。

有其他见解的同学留言讨论。

IOS学习笔记41--图片的缩放(一)的更多相关文章

  1. [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading

    上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...

  2. iOS学习笔记31-从图册获取图片和视频

    一.从图册中获取本地图片和视频 从图册中获取文件,我们使用的是UIImagePickerController,这个类我们在之前的摄像头中使用过,这里是链接:iOS学习笔记27-摄像头,这里我们使用的是 ...

  3. iOS学习笔记20-地图(二)MapKit框架

    一.地图开发介绍 从iOS6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的. 在iOS中进行地图开发主要有三种方式: 利用MapKit框架进行地图开发,利用这种 ...

  4. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  5. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  6. iOS学习笔记-自己动手写RESideMenu

    代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...

  7. iOS学习笔记-自定义过渡动画

    代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...

  8. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  9. iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】

    iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...

随机推荐

  1. java基础42 File类的构造函数及其方法

    本文知识点(目录): 1.IO流(Input Output)    2.IO流技术的运用场景    3.File类的构造函数(方法)    4.File类的一些常用方法    5.实例(解析File类 ...

  2. Java 容器的打印

    Java容器类库中的两种主要类型,它们的区别在于容器中每个"槽"保存的元素个数 Clollection容器只能在保存一个元素,此类容器包括: List,它以特定顺序保存一组元素 S ...

  3. C++ 必须使用初始化列表

    继承关系中,父类无默认构造函数 类类型类成员变量无默认构造函数 const类型成员变量 引用类型成员变量 不使用初始化列表,在创建对象调用构造函数之前会对所有的成员变量进行默认初始化,然后再执行构造函 ...

  4. 以太坊go-ethereum常见问题汇总

    (1)什么是 Ethereum? 以太坊是一个分散的智能合同平台,由Ether的加密货币提供支持. (2) 听说过以太坊,但什么是Geth,Mist,Ethminer,Mix? Geth: 以太坊节点 ...

  5. WordPress解决优酷、土豆视频移动端观看问题并自适应

    转:https://www.xhsay.com/wp-iframe-handler-youku-tudou.html 虽然WordPress能直接插入优酷.土豆的视频但是无法在移动端观看,于是乎笨笨就 ...

  6. git/github 生成密钥

    当从本地提交文件到github的时候,提交不成功,报错,可能问题就是你还没有生成ssh秘钥 github要使用ssh密钥的原因: git使用https协议,每次pull, push都要输入密码,相当的 ...

  7. Java之反转排序

    顾名思义,反转排序就是以相反的顺序把原来的数组内容重新进行排序.反转排序算法在我们的程序开发中也是经常用到的.而反转排序的基本思想也很简单,就是把数组最后一个元素与第一个元素进行交换,倒数第二个与第二 ...

  8. LOADRUNNER连接ORACLE数据库的方法

    LOADRUNNER连接ORACLE数据库的方法     最近正在做一个测试数据库性能的项目,直接写出来的连接数据库并且进行数据库查询和插入的脚本在VUSER_INIT中(连接数据库)#include ...

  9. 【Java】返回长度为零的数组或者集合,而不是null

    今天在牛客网上做一个编程题时,在提交代码后老是抛出NullPointerException异常,大概的代码如下: public ArrayList<Integer> foo(TreeNod ...

  10. html5+css3 h5页面生成的思路

    <!DOCTYPE html><html style="height: 100%;"> <head> <meta charset=&quo ...