IOS学习笔记41--图片的缩放(一)
图片的缩放
一: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--图片的缩放(一)的更多相关文章
- [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...
- iOS学习笔记31-从图册获取图片和视频
一.从图册中获取本地图片和视频 从图册中获取文件,我们使用的是UIImagePickerController,这个类我们在之前的摄像头中使用过,这里是链接:iOS学习笔记27-摄像头,这里我们使用的是 ...
- iOS学习笔记20-地图(二)MapKit框架
一.地图开发介绍 从iOS6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的. 在iOS中进行地图开发主要有三种方式: 利用MapKit框架进行地图开发,利用这种 ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- iOS学习笔记-自己动手写RESideMenu
代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...
- iOS学习笔记-自定义过渡动画
代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...
- iOS学习笔记-地图MapKit入门
代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...
- iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】
iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...
随机推荐
- Python模块Pygame安装
一.使用pip安装Python包 大多数较新的Python版本都自带pip,因此首先可检查系统是否已经安装了pip.在Python3中,pip有时被称为pip3. 1.在Linux和OS X系统中检查 ...
- Effective STL 学习笔记 32 ~ 33
Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Django杂记
django 中 slice 和 truncatewords 不同用法 django中取一段字符串中的前 N 个字符,可以用 slice和truncatewords ,但是两者是有区别的. djang ...
- Spring整合JDBC以及AOP管理事务
本节内容: Spring整合JDBC Spring中的AOP管理事务 一.Spring整合JDBC Spring框架永远是一个容器,Spring整合JDBC其实就是Spring提供了一个对象,这个对象 ...
- 【51nod】1559 车和矩形
题解 离线读入,我们发现一个矩形能被保护,矩形内部所有列上必定有一辆车,或者所有行上必定有一辆车 分两次进行处理 第一次按照横坐标把车加进去,然后查询最大横坐标在这个位置的矩形,纵坐标区间里的车出现位 ...
- Python全栈开发之13、CSS
一.css简介 CSS 是 Cascading Style Sheets的缩写,用来设计网页的样式布局,以及大小来适应不同的屏幕等,使网页的样式和网页数据分离, 二.导入css 导入css有4种方式: ...
- Zookeeper服务器集群的搭建与操作
ZooKeeper 作用:Zookeeper 可以用来保证数据在zk集群之间的数据的事务性一致(原子操作). 介绍:Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoo ...
- HTTP协议--请求与响应
1.简介 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990 年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW 中使用的是HT ...
- thinkphp3.2自动生成模块BIND_MODULE
thinphp3.2中提供了自定义生成模块与控制器的常量,分别是BIND_MODULE,BUILD_CONTROLLER_LIST 在 index.php 文件中定义 BIND_MODULE,BUIL ...
- source Insight 软件使用注意点
1. 需要将 tab键转为 4个空格 首先通过路径(Options->Document Options)进入以下界面: step 1:将 Visible tabs 打勾. step 2 :将 E ...