使用 UIPinchGestureRecognizer 手势可以放大或缩小UIImageView视图。放大或缩小的值是根据 UIPinchGestureRecognizer 的scale决定。这个值在手势的生命周期内是一个时间点的值。可以假设为开始时这个值是1,缩放率为1,很好理解。
在手势begin的,将UIImageView视图的transform记录下来,作为初始值。在手势的changed过程中,每一个changed时候获取的scale值都是和begin时的值的比率。在手势结束时,将scale的值也记录下来。

还有一个原因,这个pinch手势会多次执行,要知道从第一次缩放到最后退出,总的缩放比率是多大就得这样操作。


_lastPhotoScale
= _lastPhotoScale
*gesture.scale
;
基本的数学概率,也很好理解。
这里缩放的仅仅是
UIImageView视图,对于视图的image是没有任何改变的。因此,既然
UIImageView视图的size很小了,但图片看上去还是非常清晰,图片的像素还是那么高呀。

如果需要将
UIImage也做缩放的话,在UIImage中去实现。在
UIImage真的缩小了以后,你发现,图片不清晰了。这是正常的,因为图片的体积真的小了。

- (void)scalePhoto:(UIPinchGestureRecognizer *)gesture

{

    // GTMLoggerDebug(@"scale is %f",gesture.scale);

    if (gesture.state ==UIGestureRecognizerStateBegan) {

        currentTransform =_photoView.transform;

    }

    if (gesture.state ==UIGestureRecognizerStateChanged) {

        CGAffineTransform tr =CGAffineTransformScale(currentTransform, gesture.scale, gesture.scale);

        _photoView.transform = tr;

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

        NSLog(@"ing:_lastPhotoScale is %f,scale is %f,frame is %@",_lastPhotoScale, gesture.scale,NSStringFromCGSize(_photoView.frame.size));

    }

    // 当手指离开屏幕时,将lastscale设置为1.0

    if ((gesture.state ==UIGestureRecognizerStateEnded) || (gesture.state ==UIGestureRecognizerStateCancelled)) {

        _lastPhotoScale =_lastPhotoScale*gesture.scale;

        NSLog(@"end:_lastPhotoScale is %f,scale is %f,frame is %@",_lastPhotoScale, gesture.scale,NSStringFromCGSize(_photoView.frame.size));

        GTMLoggerDebug(@"_photoImage %p size is %@,_lastPhotoScale is %f",_photoImage, NSStringFromCGSize(_photoImage.size),_lastPhotoScale);

        GTMLoggerDebug(@"_photoView %p frame is %@",_photoView.image,NSStringFromCGRect(_photoView.frame));

    }

}


UIPinchGestureRecognizer 的scale使用的更多相关文章

  1. 点击事件touches与ios的手势UIGestureRecognizer

    .h文件 @property (weak,nonatomic) IBOutlet UILabel *messageLabel;@property (weak,nonatomic) IBOutlet U ...

  2. ios多手势事件

    开发ios应用时我们经常用到多手势来处理事情,如给scrollView增加点击事件,scrollView不能响应view的touch事件,但有时候却要用到多手势事件,那么我们可以给这个scrollVi ...

  3. iOS开发-轻点、触摸和手势

    一.响应者链 以UIResponder作为超类的任何类都是响应者.UIView和UIControl是UIReponder的子类,因此所有视图和所有控件都是响应者. 初始相应器事件首先会传递给UIApp ...

  4. iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer

    首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下: 往viewController.xib文件里拖动一个imageView,并使覆盖整个 ...

  5. UIView用户事件响应

    UIView除了负责展示内容给用户外还负责响应用户事件.本章主要介绍UIView用户交互相关的属性和方法. 1.交互相关的属性 userInteractionEnabled 默认是YES ,如果设置为 ...

  6. iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer

    首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下: 往viewController.xib文件里拖动一个imageView,并使覆盖整个 ...

  7. Event Handling Guide for iOS--事件驱动指南

    事件是发送给应用程序来通知它用户动作的对象.在iOS中,事件可以有多种形式:多触摸事件,motion(,移动,手 势)事件---例如,设备的加速计(accelerometer)--和控制多媒体的事件. ...

  8. CSS动画划入划出酷炫

    HTML插入 <!DOCTYPE html> <html class="no-js iarouse"> <head> <meta char ...

  9. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

随机推荐

  1. Android:Drag and Drop的应用

    最近看了下Drag and Drop部分的原文,觉得很有意思就像自己试着做一下,说实在的原文真的是不好读啊,要感谢那些为我们发表译文的大神们, 真的是不容易,原文中给了例子,但是只有后面零星的代码,真 ...

  2. 【Visual C++】Windows GDI贴图闪烁解决方法

    一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁. 先来谈谈闪烁产生的原因 原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的 ...

  3. H面试程序(4):翻转句子中单词的顺序 .

    题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. 句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理. 例如输入“I am a student.”,则输出“stude ...

  4. c#indexof使用方法

    IndexOf() 查找字串中指定字符或字串首次出现的位置,返首索引值,如: str1.IndexOf("字"): //查找"字"在str1中的索引值(位置) ...

  5. cocos2dX 事件之触摸事件和触摸事件集合

    今天, 我们来学习cocos2dX里面的触摸事件与触摸事件合集, 如今的手机游戏交互基本上都是通过触摸交互的, 所以大家明确这节的重要性了吧, 本节篇幅比較大, 所以我就不扯闲话了 先来看看经常使用函 ...

  6. inline与lnk2001、lnk2019,鸡肋?

    inline函数居然出现了lnk2001.lnk2019,先贴代码. a.h #pragma once class A { public: inline void foo();     void us ...

  7. Codeforces 474B Worms 二分法(水

    主题链接:http://codeforces.com/contest/474/problem/B #include <iostream> #include <cmath> #i ...

  8. [Android阅读代码]圆形旋转菜单CircleMenu

    项目名称:圆形旋转菜单CircleMenu 原版项目代码下载 感谢原作者开源

  9. [Android]Button按下后修改背景图

    Button按下后修改背景图 错误做法:为Button添加OnTouch事件监听,根据ACTION_UP和ACTION_DOWN动作来修改Button的背景图 错误原因:从理论上讲,按钮按下修改背景色 ...

  10. 慎得慌风 656ik67o

    http://photo.163.com/q/7634581 http://photo.163.com/q/7634580 http://photo.163.com/q/7634577 http:// ...