转自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函数里面添加:
[cpp] view plaincopy
-(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确定失败之后才触发。
[cpp] view plaincopy
- (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 事件处理机制详解 IOS 事件处理机制是 IOS 系统中的一种机制,用于处理用户与设备的交互操作。该机制主要包括事件类型、事件触发机制、事件传递等几个方面。 事件类型 IOS 中的事件类型主要有三种:点击事件、...
iOS 事件循环原理-Run Loop 在 iOS 开发中,事件循环机制扮演着至关重要的角色,其中 NSRunLoop 是一个核心组件,负责管理和处理事件。本文将深入探讨 NSRunLoop 的工作原理和实现机制。 一、什么是 NSRunLoop? ...
"ios事件简单Demo"这个项目很可能是为了展示如何在Objective-C或Swift中处理常见的UI事件。在这个Demo中,开发者可能会涉及触摸事件、滚动事件以及手势识别等核心概念。下面将详细讲解这些知识点。 1. 触摸事件...
源码分析通常能提供宝贵的学习经验,尤其是对于那些希望深入了解iOS事件处理机制的开发者。通过阅读和调试`HitTestViewUsage-master`中的代码,你可以看到如何根据业务需求定制事件的处理流程,以及如何在不影响其他...
本分析将深入探讨iOS事件响应链的工作原理、手势交互的相关概念以及如何通过实践理解这一过程。 首先,事件响应链是由一系列UIView及其子类对象构成的层次结构,这些对象都有能力接收并处理用户的触摸事件。事件...
iOS事件总线,支持AppDelegate解耦,支持基于响应
QTEventBus QTEventBus是一个优雅的iOS事件总线,实现了“发布-订阅”的消息通信模式。支持强类型/弱类型自动取消订阅快速兼容NSNotification单元测试覆盖支持AppDelegate解压缩支持基于响应链的局部总线文章:安装...
在iOS开发中,事件时间记录与次数统计是十分重要的功能,尤其对于性能优化和用户体验分析。这个开源项目“EventLogger-master”提供了一种系统化的方式来追踪应用内的各种事件,包括用户交互、网络请求、错误发生等...
目录一 iOS中的事件1 事件的产生和类型2 响应者对象3 UIview和CALayer二 事件传递和响应机制1 事件的传递2 系统实现3 视图的响应三 事件和runloop 一 iOS中的事件 1 事件的产生和类型 用户对iOS设备进行了一些操作, ...
iOS事件的传递与响应是一个重要的话题,网上谈论的很多,但大多讲述并不完整,本文将结合苹果官方的文档对事件的传递与响应原理及应用实践做一个比较完整的总结。文章将依次介绍下列内容:iOS中事件一共有四种类型,...
首先,我们需要理解iOS事件处理的基本机制。在iOS中,所有的用户交互都由UIKit框架处理,它通过事件循环来捕获并分发触摸事件。当用户在屏幕上触摸时,这些事件被硬件传感器捕捉,然后转化为触摸对象(UITouch)传递...
在iOS应用开发中,事件驱动的设计模式经常被用于简化组件之间的通信。SwiftyEventBus是一个流行的开源项目,它为iOS和Swift提供了发布/订阅(Publish/Subscribe)模式的事件总线实现。这种模式允许不同组件之间松...
通过分析这个示例项目,开发者可以深入理解iOS事件响应系统的工作原理,这对于构建任何具有用户交互的iOS应用都是至关重要的。此外,这个项目也可以作为一个学习资源,帮助开发者更好地掌握Objective-C或Swift中的...
在深入探讨iOS事件处理机制之前,我们先来了解下本指南的大致背景。这份文档由苹果公司在2009年发布,旨在为开发者提供关于iOS事件体系结构及编程指导的重要资料。文档详细介绍了如何在iOS应用中有效地管理和响应...
在iOS平台上,与日历事件相关的开发涉及到苹果的EventKit框架,这个框架允许开发者读取、创建、修改和删除用户的日历事件。本Demo的核心是一个名为"CalendarEventSdk"的SDK,它提供了一套简便的方法来操作日历事件,...
首先,`touchEvent`是iOS中的触摸事件模型,它包含了用户对屏幕的触摸操作,如按下、移动和抬起等。在`UIScrollView`中,这些事件被用来处理用户的滚动行为。`UIScrollView`有一个内置的触摸处理系统,它会监听触摸...
"解决iOS下无法触发focus事件的问题" 在移动端开发中, focus 事件是一个非常重要的事件,它可以帮助开发者更好地控制用户的输入行为。但是在iOS平台上,触发 focus 事件却是一个非常棘手的问题。本文将为大家分享...
iOS事件处理指南 iOS平台上的应用需要能够响应用户的触摸、移动、摇晃甚至远程控制等事件,以便实现丰富的交互体验。事件处理是移动应用开发中的一个核心组成部分,涉及到触摸事件、手势识别、事件传递等关键概念。...
在iOS平台上,添加事件到系统日历是一项常见的功能,它允许用户通过应用程序创建、管理和查看日历事件。本文将深入探讨如何在iOS应用中实现这一功能,主要关注导入`EventKit`框架并进行相关操作。 首先,为了在iOS...