iOS 手势识别
首先给大家解释一下为什么要学习手势识别?
如果想监听一个UIView上面的触摸事件,之前的做法是: 自定义一个UIView ; 实现UIView的touches方法,在方法里面实现具体功能
透过touches监听UIView的触摸事件,有很明显的几个缺点:
1.必须要自定义UIView,
2.由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听UIView的触摸事件
3.不容易区分用户的具体手势行为;(touches方法中根据坐标变换,判断x,y值的变化,推出用户的手势行为。 这是很麻烦的)
iOS3.2之后,苹果推出了手势识别功能(Gesture Recognizer),在触摸事件处理方法,大大简化了开发者的难度
为了完成手势识别,必须借助于手势识别器-UIGestureRecognizer
利用UIGestureRecognizer,能轻松识别用户在某个View上面的做的一些常见手势
先介绍一下UIGestureRecognizer,它是一个抽象类,抽象类的意思也就是说UIGestureRecognizer是一个父类(基类),它是没什么用的,由它派生出来的子类是我们要具体学习的
下面介绍一下UIGestureRecognizer的子类有哪些
1.UITapGestureRecognizer(点按);
2.UIPinchGestureRecognizer(捏合,用于缩放)
3.UIPanGestureRecognizer(拖动)
4.UISwipeGestureRecognizer(轻扫)
5.UIRotationGestureRecognizer(旋转)
6.UILongPressGestureRecognizer(长按)
系统给我们提供了6种基本的手势行为,UIGestureRecognizer只是对这6个手势行为进行一个统一管理
下面,给大家介绍每个手势行为的简单用处,以及注意事项
准备工作:

在ViewController中获取UIImageView属性

接下来,用UIImageView演示一下6中手势行为的基本使用
手势识别的使用步骤:1 创建手势识别实例(实例化对象,创建手势) 2.设置手势识别属性,例如手指数量,方向等 3.将手势识别添加到指定的视图上面(添加手势)
4 实现手势触发监听方法
第一种:轻点手势[UITapGestureRecognizer]

注意点1:self.imageView表示我要给imageView视图添加手势识别,只有点击imageView图片才会触发tap:方法,点出超出ImageView的地方,是不会触发tap:方法的,有的同学写成self.view是代表给整个大得UIView视图添加手势识别,这样只要点击屏幕就会触发事件。所以大家一定要注意
注意点2:方法参数的类型要和当前监听的手势行为一致,不一致的话会导致手势行为的属性没办法获取,不同的手势行为有不同的属性;一定要细心
下面我添加手势识别属性

第二种:(轻扫手势)[UISwipeGestureRecognizer]

这个时候,只能向右轻扫,才会触发swip:方法,其余上下左三个方向都不会触发,默认是向右触发方法
如何同时监听图片的各种轻扫方向呢?那么,需要设值手势行为的direction属性

看起来没问题,向左向右都将可以触发方法,但是请继续看下面

此时系统已经分不清你到底是向左还是向右轻扫了,只是能监听到你左右轻扫的手势行为。无论向左向右,系统都认为你是向左的,这样我们就无法实现向左向右实现不同的功能了,怎么解决呢?

解决方法很简单,就是不同的方向分别创建一个手势行为对象,这样就可以识别轻扫方向,执行对应的代码了。很重要,一定要注意
第三种: 长按[UILongPressGestureRecognizer]

手指开始长按图片一定时间会执行一次方法,松开手指的时候又会打印一次方法,这样肯定不能满足我们的需求,怎么解决呢?任何手势行为都是分阶段的。所以根据手势行为的阶段,进行判断

这是长按手势比较特殊的地方,一定要注意,长按有一个手势属性

第四种:旋转 UIRotationGestureRecognizer

解释:sender.rotation属性是叠加是什么意思? 当我们手势旋转10度的时候,sender.rotation = 10度;如果我们再旋转10度,此时sender.rotation = 20度;
所以是叠加的,所以要用带make的CGAffine方法,因为这个方法每次旋转都是从图片最初位置开始;

第五种:拖拽 UIPanGestureRecognizer

第六种:捏合 UIPinchGestureRecognizer

经过对六种手势的简单实用,需要注意的地方,总结:轻点手势(tap)可以设置tap.numOfTapsRequired属性,是连续点击几次会触发监听事件
轻扫手势(swip)需要注意swip手势需要自己设置轻扫方向,默认是向右的。另外每个方向都要创建一个手势,系统监听方法内部才能判断是向什么方向轻扫
长按手势(longPress) 需要注意长按手势,当你按住图片一段时间会触发一次监听事件,当你松开手指,会再一次触发监听事件。所以我们要对手势的阶段进行判断
旋转(rotation) 旋转手势对应的是获取旋转角度属性sender.rotation 注意是叠加属性,记得清零
拖拽(pan) 需要注意拖拽手势对应的是获取拖拽的点, CGPoint point = [sender translationInView:sender.view];同样是叠加属性,记得归零
捏合(缩放)(pinch) 组要注意缩放手势获取的是缩放值,sender.scale ,叠加属性,记得归零。但是缩放比例的归零就是sender.scale = 1.0;
iOS 手势识别的更多相关文章
- iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加 ...
- ios iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 转自容芳志大神的博客:http://www.cnblogs.com/stoic/archive/2013/02/27/2940 ...
- iOS,手势识别简单使用
1.iOS目前支持的手势识别(6种) 2.点按手势和慢速拖动手势简单使用 iOS目前支持的手势识别(6种) UITapGestureRecognizer(点按) UIPinchGestureRecog ...
- UIGestureRecognizer ios手势识别温习
1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性. iOS系统在3.2以后,为方便开发这使用一些常用的手势,提供了 ...
- 【转】iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) -- 不错不错
原文网址:http://blog.csdn.net/totogo2010/article/details/8615940 1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手 ...
- 介绍一些实用的IOS手势识别库 (COCOS2D)
http://www.supersuraccoon-cocos2d.com/zh/2012/11/14/introduction-to-some-great-ios-gesture-recogniti ...
- ios手势识别代理
之前做优质派时写了个仿网易新闻导航的第三方,由于当时做项目时这个主控制器就是RootViewController,虽然用的是ScrollView但也没考虑到导航栏的手势返回的问题 ,现在做小区宝3.0 ...
- iOS手势识别
一.手势识别与触摸事件 1.如果想监听一个view上面的触摸事件,可选的做法是: (1)自定义一个view (2)实现view的touches方法,在方法内部实现具体处理代码 2.通过touches方 ...
- IOS手势识别,捏合,旋转,轻扫等
ref:http://blog.csdn.net/rechard_chen/article/details/51769972 //点按手势的创建,这里需要实现响应事件的方法 UITapGestur ...
随机推荐
- Android: 自定义Tab样式,一种简单的方式。
之前看到过论坛里已经有人发过自定义Tab样式的帖子,感觉有些复杂了,这里分享个简单的方法. 1.制作4个9patch的tab样式,可参考android默认的资源 tab_unselected.9.pn ...
- 在 InstantRails 环境下,安装使用 redMine
在 InstantRails 环境下,安装使用 redMine 分类: Redmine2009-06-01 10:35 732人阅读 评论(0) 收藏 举报 characterrailsencodin ...
- Factovisors - PC110704
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10139.html 原创: 作者: ...
- MVC中用Jpaginate分页
MVC中用Jpaginate分页 So easy!(兼容ie家族) 看过几款分页插件,觉得Jpaginate比较简约,样式也比较容易的定制,而且体验也比较好,支持鼠标滑动效果.先上效果图: 整个过 ...
- Asp.Net MVC 3
Asp.Net MVC 3 wcf基础教程之 契约(合同)Contract 摘要: 在前几篇博客中我有说到服务的寄宿,就是服务要运行起来必须采取的几种方式,相当于我们可以照葫芦画瓜的效果运行一个w ...
- Effective C++ 读书总结
(中文第三版 侯捷 译) 这本书在C++领域也是大名鼎鼎,在微博看到有人说,如果以前学过C语言,那只需花一天时间把 Effective C++ 看一遍,然后再看 leveldb代码(http://t. ...
- 读写ini文件
C# 使用文件流来读写ini文件 背景 之前采用ini文件作为程序的配置文件,觉得这种结构简单明了,配置起来也挺方便.然后操作方式是通过WindowsAPI,然后再网上找到一个基于WindowsAPI ...
- 【编程范式】C语言1
最近在网易公开课上看斯坦福大学的<编程范式>,外国人讲课思路就是清晰,上了几节课,感觉难度确实比我们普通大学大很多,但是却很有趣,让人能边学边想. 范式编程,交换两个数,利用 void * ...
- 迷你MVVM框架 avalonjs 0.95发布
迷你MVVM框架 avalonjs 0.95发布 本版本最主要的改进是ms-with 深层绑定的实现,至少,avalon1.0所有重要的feature已经开发完毕,之后就是小补小漏,性能优化了. ms ...
- 没有标准化字符串的后果(IOS)
对于NSString肯定会经常用到,谈谈最近在项目中遇到的一个奇特的现象.如下:我们知道文件系统的命名都是用的字符串,比如你给文件取名“a.pdf”,然后保存文件后,那个文件的名字就真的是 " ...