#pragma mark - 手势  总共有五种手势  分别为 Tap点击 Pan拖拽 LongPress长时间按压 Pinch捏合手势 rotation旋转

1. 定义成员变量

UIImageView *_imgView; 定义UIImageView, 响应手势方法时调用

CGPoint originalCenter;  记录一下拖拽手势起始位置

CGAffineTransform  originalTrans; 记录一下捏合、旋转手势起始位置

2. 定义ImageView

UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(50, 100, 200, 200)];

imgView.image = [UIImage imageNamed:@"btn_02"];

[self.view addSubview:imgView];

_imgView = imgView; //赋值

3. 打开与用户的交互能力 (至关重要,不能忘记)

imgView.userInteractionEnabled = YES;

4.Tap手势 --> 点击1次/两次

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(onceTapped )];

把这个手势添加到视图中

[imgView addGestureRecognizer:tap];

UITapGestureRecognizer *dblTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(twiceTapped)];

dblTap.numberOfTapsRequired = 2;

[imgView addGestureRecognizer:dblTap];

4.1 点击手势响应的方法

-(void)onceTapped{

NSLog(@"onceTapped");

}

-(void)twiceTapped{

NSLog(@"twiceTapped");

}

5.Pan手势 --> 拖拽

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(viewPanned:)];

[imgView addGestureRecognizer:pan];

5.1 拖拽时响应的方法

-(void)viewPanned:(UIPanGestureRecognizer *)pan{

先记录一下起始位置

if (pan.state == UIGestureRecognizerStateBegan) {

originalCenter = imgView.center;

}

CGPoint transPoint = [pan translationInView:_imgView];

CGPoint center = originalCenter;

center.x += transPoint.x;

center.y += transPoint.y;

imgView.center = center;

CGPoint velocityPoint = [pan velocityInView:_imgView];

}

6. LongPress手势 --> 长时间按压

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self  action:@selector(longPressed )];

[imgView addGestureRecognizer:longPress];

longPress.minimumPressDuration = 1;

6.1 长时间按压响应的方法

-(void)longPressed{

NSLog(@"long Press");

}

7.  Pinch手势 --> 捏合手势

UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchImg:)];

[imgView addGestureRecognizer:pinch];

7.1 捏合时响应的方法

-(void)pinchImg:(UIPinchGestureRecognizer *)pinch {

if (pinch.state == UIGestureRecognizerStateBegan) {

originalTrans = _imgView.transform;

}

_imgView.transform = CGAffineTransformScale(originalTrans, pinch.scale, pinch.scale);

}

8. rotation手势 --> 旋转

UIRotationGestureRecognizer * rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotateImg:)];

[imgView addGestureRecognizer:rotation];

8.1 旋转手势响应的方法

-(void)rotateImg:(UIRotationGestureRecognizer *)rotation{

if (rotation.state == UIGestureRecognizerStateBegan) {

originalTrans = _imgView.transform;

}

_imgView.transform = CGAffineTransformRotate(originalTrans, rotation.rotation);

if (rotation.state == UIGestureRecognizerStateEnded) {

_imgView.transform = originalTrans;

}

}

UI- 五种手势识别总结的更多相关文章

  1. 【转】Android UI 五种布局

    在一个Android应用中,Layout是开发中的一个很重要环节,Layout是组成UI不可缺少的一部分. ## Android UI 核心类 在Android应用构建UI的方法有以下几种: 单纯使用 ...

  2. jQuery插件开发的五种形态[转]

    这篇文章主要介绍了jQuery插件开发的五种形态小结,具体的内容就是解决javascript插件的8种特征,非常的详细. 关于jQuery插件的开发自己也做了少许研究,自己也写过多个插件,在自己的团队 ...

  3. Ngui 五种点击事件实现方式及在3d场景中点透的情况

    http://www.unity蛮牛.com/thread-22018-1-1.html ngui作为unity界面插件之一中,无疑是最好用,使用最多的了从自学unity到现在界面一直使用它 由于它的 ...

  4. Android经常使用的五种弹出对话框

    一个Android开发中经常使用对话框的小样例,共同拥有五种对话框:普通弹出对话框,单选对话框,多选对话框,输入对话框及进度条样式对话框: <LinearLayout xmlns:android ...

  5. 【转】从框架看PHP的五种境界及各自的薪资待遇

    无意中看到这篇文章,有些触动,作为博客开篇,用来激励自己. 原文地址:点击打开 在撰写此文前首先必须申明的是本人不鄙视任何一种框架,也无意于挑起PHP框架间的战争,更没有贬低某个框架使用者的用意,本文 ...

  6. 开关电源五种PWM反馈控制模式

    开关电源五种PWM反馈控制模式 来源:--作者:--浏览:178时间:2016-08-10 14:18 关键词: 1 引言 PWM开关稳压或稳流电源基本工作原理就是在输入电压变化.内部参数变化.外接负 ...

  7. 04: 事件驱动、五种I/O操作、I/O多路复用select和epoll

    网络编程其他篇 目录: 1.1 事件驱动 1.2 五种I/O操作 1.3 I/O 多路复用之select.poll.epoll详解 1.1 事件驱动返回顶部 1.什么是事件驱动  定义:就是根据不同事 ...

  8. 转:从框架看PHP的五种境界及各自的薪资待遇(仅限于二三线城市,一线除外)

    在撰写此文前首先必须申明的是本人不鄙视任何一种框架,也无意于挑起PHP框架间的战争,更没有贬低某个框架使用者的用意,本文纯粹个人的看法.你可以认为我无知也好,或者装逼也好,请不要试着在任何情况下,随便 ...

  9. APP界面常用的五种颜色搭配

    众所周知,每一种颜色带给用户的视觉感受也是不同的.现在人们对手机的依赖程度,就能看到手机中APP的发展前景,那今天就跟大家聊聊如何通过颜色搭配的不同来进行移动端APP界面的布局和排版设计.移动端UI界 ...

  10. 【转】 C#后台调用前台javascript的五种方法

    第一种,OnClientClick    (vs2003不支持这个方法)<asp:ButtonID="Button1" runat="server" Te ...

随机推荐

  1. 001-前端系列-react系列

    一.概述 原文地址:http://www.ruanyifeng.com/blog/2016/09/react-technology-stack.html 二.摘要 ES6 语法:教程 [可以了解] B ...

  2. openPOWERLINK代码在vs2008下编译

    以openPOWERLINK_V1.08为例: 1.在主目录下新建Build目录 2.使用cmake-gui对代码进行配置 3.配置完成后生成工程文件xxx.sln 4.使用vs2008打开上述文件, ...

  3. HDU1165: Eddy's research II(递推)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1165 果断不擅长找规律啊,做这种题静不下心来. Ackermann function can be def ...

  4. 关于C# yield 你会使用吗?

    假设有这样一个需求:在一个数据源(下面代码arry)中把其中大于4的数据取出来遍历到前台,怎么做?(不使用linq) , , , , , , , , , }; 第一种情况:  不使用yield的情况下 ...

  5. SharePoint 2010 以Jquery Ajax方式更新SharePoint列表数据!

    之前本人的博客介绍了<sharepoint 2010自定义访问日志列表设置移动终端否和客户端访问系统等计算列的公式>,那如何通过Jquery提交访问日志到自定义的SharePoint的访问 ...

  6. Linux常用命令(6/26)——dd命令和split命令

    dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 以可选块长度复制文件,默认情况下从标准输入设备输出到标准输出设备.复制过程中,还可以对文件进行一些转换. dd命令可以指定block的 ...

  7. 在HI3531上移植和运行QT4.8.6

    在HI3531上移植和运行QT4.8.6 1.            前言: 近段有点时间,想把QT移植到HI3531上,在网上查找了很多资料,但都不是很全面,有些有问题也没有得到很好的体现. 2.  ...

  8. 【Head First Servlets and JSP】笔记

    1.谈到服务器的时候,可能是指物理主机(硬件),也可能是指Web服务应用(软件). 2.谈到客户的时候,通常指人类用户,或者是浏览器应用,或者两者都包括,浏览器应用做些什么?发送请求.解释HTML和呈 ...

  9. LAMP脚本

    A goal is a dream with a deadline. Much effort, much prosperity. 环境:CentOS release 6.5  2.6.32-431.e ...

  10. sublime使用sublimelint-luacheck屏蔽指定警告

    在成功安装SublimeLinter-lua与luacheck以后,如果没有语法error,则会进行警告提示. 如下图 waring: line contains trailing whitespac ...