UI- 五种手势识别总结
#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- 五种手势识别总结的更多相关文章
- 【转】Android  UI 五种布局
		在一个Android应用中,Layout是开发中的一个很重要环节,Layout是组成UI不可缺少的一部分. ## Android UI 核心类 在Android应用构建UI的方法有以下几种: 单纯使用 ... 
- jQuery插件开发的五种形态[转]
		这篇文章主要介绍了jQuery插件开发的五种形态小结,具体的内容就是解决javascript插件的8种特征,非常的详细. 关于jQuery插件的开发自己也做了少许研究,自己也写过多个插件,在自己的团队 ... 
- Ngui 五种点击事件实现方式及在3d场景中点透的情况
		http://www.unity蛮牛.com/thread-22018-1-1.html ngui作为unity界面插件之一中,无疑是最好用,使用最多的了从自学unity到现在界面一直使用它 由于它的 ... 
- Android经常使用的五种弹出对话框
		一个Android开发中经常使用对话框的小样例,共同拥有五种对话框:普通弹出对话框,单选对话框,多选对话框,输入对话框及进度条样式对话框: <LinearLayout xmlns:android ... 
- 【转】从框架看PHP的五种境界及各自的薪资待遇
		无意中看到这篇文章,有些触动,作为博客开篇,用来激励自己. 原文地址:点击打开 在撰写此文前首先必须申明的是本人不鄙视任何一种框架,也无意于挑起PHP框架间的战争,更没有贬低某个框架使用者的用意,本文 ... 
- 开关电源五种PWM反馈控制模式
		开关电源五种PWM反馈控制模式 来源:--作者:--浏览:178时间:2016-08-10 14:18 关键词: 1 引言 PWM开关稳压或稳流电源基本工作原理就是在输入电压变化.内部参数变化.外接负 ... 
- 04: 事件驱动、五种I/O操作、I/O多路复用select和epoll
		网络编程其他篇 目录: 1.1 事件驱动 1.2 五种I/O操作 1.3 I/O 多路复用之select.poll.epoll详解 1.1 事件驱动返回顶部 1.什么是事件驱动 定义:就是根据不同事 ... 
- 转:从框架看PHP的五种境界及各自的薪资待遇(仅限于二三线城市,一线除外)
		在撰写此文前首先必须申明的是本人不鄙视任何一种框架,也无意于挑起PHP框架间的战争,更没有贬低某个框架使用者的用意,本文纯粹个人的看法.你可以认为我无知也好,或者装逼也好,请不要试着在任何情况下,随便 ... 
- APP界面常用的五种颜色搭配
		众所周知,每一种颜色带给用户的视觉感受也是不同的.现在人们对手机的依赖程度,就能看到手机中APP的发展前景,那今天就跟大家聊聊如何通过颜色搭配的不同来进行移动端APP界面的布局和排版设计.移动端UI界 ... 
- 【转】 C#后台调用前台javascript的五种方法
		第一种,OnClientClick (vs2003不支持这个方法)<asp:ButtonID="Button1" runat="server" Te ... 
随机推荐
- flask实现获取表单并执行shell
			1.一个HTML form input和一个button提供给用户输入 2.使用flask的request获取用户输入的文件名 3.判断输入异常 4.执行shell命令touch aa.txt 并返回 ... 
- 单文件快速体验使用react输出hello_world
			看了下react官方的hello world教程, 感觉对新手很不友好.codepen虽然好用, 但是封装太多东西, 看起来 太抽象. 还是喜欢像学习jQuery那样, 直接在单文件中引入必要的js文 ... 
- SpringMVC学习大纲
			PartA: 1.SpringMVC介绍 2.入门程序 3.SpringMVC架构讲解 a) 框架结构 b) 组件说明 4.SpringMVC整合MyBatis 5.参数绑定 a) SpringMVC ... 
- cdojQ - 昊昊爱运动 II
			地址:http://acm.uestc.edu.cn/#/contest/show/95 题目: Q - 昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) ... 
- mount、umount、fuser命令使用小结
			mount -t cifs -o username=administrator,password=xxxxx //192.168.11.17/Data/ /mnt/databak/之后想卸载挂载目录, ... 
- Resharper 快捷键
			编辑 Ctrl + Space 代码完成 Ctrl + Shift + Space代码完成 Ctrl + Alt + Space代码完成 Ctrl + P 显示参数信息 Alt + Insert ... 
- jQuery鼠标滑动切换焦点图
			在线演示 本地下载 
- ThinkPHP开发博客系统笔记之二
			1. 登陆验证码 当用户登陆的时候我们希望也弹出验证码,有两种方法可以实现:一是再增加一个弹出验证码的dialog,二是和注册共用一个验证码dialog.第一种方法有大量重复代码,所以我们使用第二种方 ... 
- centos7 部署 dotnetcore
			一.在centos上下载dotnetcore SDK 二. 选择Linux发行版安装 按上面的步骤安装,在centos终端输入dotnet --version 显示版本信息即安装成功 
- AJAX基础知识点——思维导图
			如图 思维导图图片链接 http://www.edrawsoft.cn/viewer/public/s/4db2e712070147 有道云笔记链接 http://note.youdao.com/no ... 
