转自:http://blog.csdn.net/likendsl/article/details/7554150
一、概述
iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
但是这种方式甄别不同的手势操作实在是麻烦,需要你自己计算做不同的手势分辨。后来。。。
苹果就给出了一个比较简便的方式,就是使用UIGestureRecognizer。
二、UIGestureRecognizer
UIGestureRecognizer基类
是一个抽象类,我们主要是使用它的子类(名字包含链接,可以点击跳到ios Developer library,看官方文档):
从名字上我们就能知道,
Tap(点击)、Pinch(捏合)、Rotation(旋转)、Swipe(滑动,快速移动,是用于监测滑动的方向的)、Pan (拖移,慢速移动,是用于监测偏移的量的)以及 LongPress(长按)。
举个例子,可以在viewDidLoad函数里面添加:
- -(void) viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view from its nib.
- UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
- [self.view addGestureRecognizer:panRecognizer];//关键语句,给self.view添加一个手势监测;
- panRecognizer.maximumNumberOfTouches = 1;
- panRecognizer.delegate = self;
- [panRecognizer release];
- }
其它手势方法类似。
其核心就是设置delegate和在需要手势监测的view上使用addGestureRecognizer添加指定的手势监测。
当然要记得在作为delegate的view的头文件加上<UIGestureRecognizerDelegate>。
不过有些手势是关联的,怎么办呢?例如 Tap 与 LongPress、Swipe与 Pan,或是 Tap 一次与Tap 兩次。
手势识别是具有互斥的原则的,比如单击和双击,如果它识别出一种手势,其后的手势将不被识别。所以对于关联手势,要做特殊处理以帮助程序甄别,应该把当前手势归结到哪一类手势里面。
比如,单击和双击并存时,如果不做处理,它就只能发送出单击的消息。为了能够识别出双击手势,就需要做一个特殊处理逻辑,即先判断手势是否是双击,在双击失效的情况下作为单击手势处理。使用
[A requireGestureRecognizerToFail:B]函数,它可以指定当A手势发生时,即便A已经滿足条件了,也不会立刻触发,会等到指定的手势B确定失败之后才触发。
- - (void)viewDidLoad
- {
- // 单击的 Recognizer
- UITapGestureRecognizer* singleRecognizer;
- singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(SingleTap:)];
- //点击的次数
- singleTapRecognizer.numberOfTapsRequired = 1; // 单击
- //给self.view添加一个手势监测;
- [self.view addGestureRecognizer:singleRecognizer];
- // 双击的 Recognizer
- UITapGestureRecognizer* double;
- doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(DoubleTap:)];
- doubleTapRecognizer.numberOfTapsRequired = 2; // 双击
- //关键语句,给self.view添加一个手势监测;
- [self.view addGestureRecognizer:doubleRecognizer];
- // 关键在这一行,双击手势确定监测失败才会触发单击手势的相应操作
- [singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];
- [singleRecognizer release];
- [doubleRecognizer release];
- }
- -(void)SingleTap:(UITapGestureRecognizer*)recognizer
- {
- //处理单击操作
- }
- -(void)DoubleTap:(UITapGestureRecognizer*)recognizer
- {
- //处理双击操作
- }
三、iphone操作手势的大概种类
1.点击(Tap)
点击作为最常用手势,用于按下或选择一个控件或条目(类似于普通的鼠标点击)、
2.拖动(Drag)
拖动用于实现一些页面的滚动,以及对控件的移动功能。
3.滑动(Flick)
滑动用于实现页面的快速滚动和翻页的功能。
4.横扫(Swipe)
横扫手势用于激活列表项的快捷操作菜单
5.双击(Double Tap)
双击放大并居中显示图片,或恢复原大小(如果当前已经放大)。同时,双击能够激活针对文字编辑菜单。
6.放大(Pinch open)
放大手势可以实现以下功能:打开订阅源,打开文章的详情。在照片查看的时候,放大手势也可实现放大图片的功能。
7.缩小(Pinch close)
缩小手势,可以实现与放大手势相反且对应的功能的功能:关闭订阅源退出到首页,关闭文章退出至索引页。在照片查看的时候,缩小手势也可实现缩小图片的功能。
8.长按(Touch &Hold)
在我的订阅页,长按订阅源将自动进入编辑模式,同时选中手指当前按下的订阅源。这时可直接拖动订阅源移动位置。
针对文字长按,将出现放大镜辅助功能。松开后,则出现编辑菜单。
针对图片长按,将出现编辑菜单。
9.摇晃(Shake)
摇晃手势,将出现撤销与重做菜单。主要是针对用户文本输入的。
相关推荐
在iOS开发中,手势操作是用户界面交互的重要组成部分。`UIGestureRecognizer`是Apple提供的一套框架,使得开发者能够轻松地识别和响应多种触摸屏幕的行为。这篇文章将对`UIGestureRecognizer`进行深入浅析,帮助你...
IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种: 1、点击 UITapGestureRecognizer 2、平移 UIPanGestureRecognizer 3、缩放 UIPinchGestureRecognizer 4、旋转...
本项目"ios手势操作演示"是一个使用Swift编写的示例,旨在帮助开发者理解和应用iOS中的手势识别技术。 Swift是Apple为iOS、macOS、watchOS和tvOS平台推出的一种强大且易学的编程语言,它具有现代编程语言的特点,如...
在iOS开发中,手势交互是用户体验的重要组成部分,特别是在移动设备上。`ios-长按手势自定义复制功能.zip`这个压缩包文件显然包含了关于如何在iOS应用中实现长按手势以提供复制功能的相关代码示例。我们将深入探讨这...
本知识点将深入讲解如何在iOS应用中实现多点触控功能,主要涉及`UIGestureRecognizer`手势识别器和`touchesMoved`方法。 首先,`UIGestureRecognizer`是iOS SDK提供的一种抽象类,用于识别不同的触摸手势,如轻拍...
本文将详细讲解如何在iOS应用中实现图片的手势操作,包括单击全屏显示、双击放大缩小以及捏合手势操作。 首先,我们需要引入UIKit框架,这个框架包含了处理用户界面和手势识别的所有基本组件。在你的Swift文件顶部...
默认情况下,iOS中的UINavigationController提供了一个滑动手势,当用户从屏幕左侧边缘向右滑动时,这个手势会触发导航栈的pop操作,即返回上一个视图控制器。这个手势是由UINavigationController内部的一个...
1. **UIGestureRecognizer**:这是iOS SDK中处理用户手势的类,如轻触、滑动、旋转等。在这个场景中,我们通常会使用UISwipeGestureRecognizer,它可以识别用户向左或向右的滑动手势。 2. **UINavigationController...
QuickDo是一款专为iOS设备设计的强大手势操作插件,它极大地提升了用户在iPhone或iPad上的交互体验。在iOS系统默认的基础上,QuickDo提供了更多自定义的可能性,让用户可以通过各种手势执行不同的命令,使得设备操作...
本篇文章将详细讲解如何在iOS的TableView中添加手势以及解决手势与TableView默认行为冲突的问题。 首先,为了在TableView的空白区域添加手势,我们需要创建一个`UITapGestureRecognizer`实例,并将其添加到...
雨松MOMO Unity3D 游戏开发系列博文之Unity3D 游戏引擎之IOS触摸屏手势控制镜头旋转与缩放,欢迎大家下载阅读,哇咔咔~~
在iOS_5中,UIGestureRecognizer类的子类涵盖了各种常用的手势,如UIPanGestureRecognizer(用于拖移操作)、UIPinchGestureRecognizer(用于二指缩放操作)、UIGestureRecognizer(用于旋转操作)等。 #### 实现...
在iOS开发中,手势识别(Gesture Recognizers)和触摸事件(Touch Events)是构建用户交互界面不可或缺的部分。这些技术使得应用程序能够对用户的屏幕操作做出响应,从而提供更加自然和直观的用户体验。本教程将深入...
联系QQ: 712641411 开发作者: 吴海超 iOS技术交流群: 302157745 轻量级手势返回框架(简单,高效) ...ViewController * rootVC = .../// 该rootNV 队列下所有VC控制器都将支持自定义触摸手势返回Pop操作
在iOS开发中,导航(Navigation)是用户界面设计的关键元素之一,它负责引导用户在应用的不同层级间自由切换。此压缩包"ios-pop手势 全屏滑动,自定义导航.zip"显然关注的是如何实现一个全屏滑动手势来驱动自定义...
"仿iOS界面手势切换"是一个Android项目,它实现了类似于iOS中的侧滑返回功能,让Android用户也能享受到类似iOS的流畅操作体验。这个项目名为"AndroidResideMenu-master",下面将详细介绍其主要知识点。 1. **侧滑...
在iOS开发中,触摸手势(Touch Gestures)是构建用户界面不可或缺的一部分,它们使得应用程序能够对用户的触摸操作做出响应,提供了丰富的交互体验。本Demo旨在详细介绍并演示了iOS中的主要触摸手势,帮助开发者深入...
在iOS开发中,实现类似支付宝的手势解锁功能是一项常见的需求,它可以为用户提供便捷且安全的解锁方式。这个功能的核心在于创建一个自定义视图,该视图能够检测用户的手势路径,并与预设的解锁模式进行匹配。接下来...
在iOS开发中,手势识别(Gesture Recognizer)是构建用户友好、交互丰富的应用程序的重要组成部分。本项目"ios-左滑手势push控制器.zip"主要关注如何通过屏幕左侧滑动手势来推动(push)新的UIViewController,实现...
- 开发者可以通过继承`UIGestureRecognizer`类来自定义手势,实现特定的操作逻辑。例如,可以创建一个检测特定轨迹的手势,或者组合多个基本手势来实现更复杂的交互。 4. 手势冲突解决: - 当多个手势同时识别到...