手势

来源:互联网 发布:考研背单词软件 编辑:程序博客网 时间:2024/04/25 13:39

在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应。

首先,当发生事件响应时,必须知道由谁来响应事件。在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会。当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发生的视图,也就是用户触摸屏幕的地方。事件将沿着响应者链一直向下传递,直到被接受并做出处理

路线图如 First Responser——>The Window——>The Application——>App Delegate

正常的响应者链流程经常被委托(delegation)打断,一个对象(通常是视图)可能将响应工作委托给另一个对象来完成(通常是视图控制器ViewController),这就是为什么做事件响应时在ViewController中必须实现相应协议来实现事件委托。

1.触摸和事件

——UITouch

UITouch对象是一个手指接触到屏幕并在屏幕上移动或离开屏幕时创建的。它有几个属性和实例方法:

phase:属性,返回一个阶段常量,指出触摸开始、继续、结束或被取消,分别对应UITouchPhaseBegan、UITouchPhaseMoved等

tapCount:属性,轻按屏幕的次数

timeStamp:属性,触摸发生的时间

view:属性,触摸始于那个视图

window:属性,触摸始于哪个窗口

lacationInView:方法,触摸在指定视图中的当前位置

previousLocationView:方法,触摸在指定视图中的前一个位置

——UIEvent

UIEvent对象包含一组相关的UITouch对象,由UITouch对象组成UIEvent对象,可以理解成一个完整的触摸操作是一个UIEvent,而这一系列完整操作中的每个点就是UITouch(按下、移动、离开)。

UIEvent的作用是提供相关触摸操作的列表,如果要获取在屏幕上触摸的手势,可以使用该对象,这一些列操作都存储在Foundation框架中的NSSet对象中。

——UIResponder

UIResponser提供四个事件响应的方法,这些方法是事件捕捉的核心。这些方法都接收两个参数,一个是NSSet(包含指定阶段的触摸)和一个UIEvent。

touchesBegan:withEvent: 在手指触摸屏幕时报告UITouchPhaseBegan事件

touchesMoved:withEvent: 在手指在屏幕上移动时报告UITouchPhaseMoved事件

touchesEnded:withEvent: 在手指离开屏幕时报告UITouchPhaseEnded事件

touchesCancelled:withEvent: 在因接听电话或其他因素导致取消触摸时报告UITouchPhaseCancelled事件

定义一个方法用来响应触摸事件:

-(void)manageTouches:(NSSet *)touches{    for (UITouch *touch in touches) {        switch (touch.phase) {            caseUITouchPhaseBegan:                NSLog(@"began...");                                break;            caseUITouchPhaseMoved:                 NSLog(@"move...");                       break;            caseUITouchPhaseEnded:                 NSLog(@"end...");                       break;            default:                break;        }    }}

然后在ViewController中响应该方法:

-(void)touchesBegan:(NSSet )touches withEvent:(UIEvent )event;

-(void)touchesMoved:(NSSet )touches withEvent:(UIEvent )event;

-(void)touchesEnded:(NSSet )touches withEvent:(UIEvent )event;

关于多点触摸,可以参考Apple IOS SDK开发文档,多点触摸在游戏及其一些新奇的应用中比较多,在常规的应用开发中还是比较少的用到多点触摸。

0 0