IOS开发之触摸事件监听和操作
白羽 2018-06-05 来源 :网络 阅读 1248 评论 0

摘要:在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应。 首先,当发生事件响应时,必须知道由谁来响应事件。在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会。当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发生的视图,也就是用户触摸屏幕的地方。事件将沿着响应者链一直向下传递,直到被接受并做出处理,希望本文对大家学IOS有所帮助。


在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事件

 

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

[cpp] view plain copy

1. -(void)manageTouches:(NSSet *)touches  

2. {  

3.     for (UITouch *touch in touches) {  

4.         switch (touch.phase) {  

5.             caseUITouchPhaseBegan:  

6.                 NSLog(@"began...");                  

7.                 break;  

8.                   

9.             caseUITouchPhaseMoved:  

10.                  NSLog(@"move...");         

11.                 break;  

12.                   

13.             caseUITouchPhaseEnded:  

14.                  NSLog(@"end...");         

15.                 break;  

16.             default:  

17.                 break;  

18.         }  

19.     }  

20. }  

 

然后在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开发文档,多点触摸在游戏及其一些新奇的应用中比较多,在常规的应用开发中还是比较少的用到多点触摸。

 


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程