首页 技术 正文
技术 2022年11月10日
0 收藏 801 点赞 4,158 浏览 1511 个字

  在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称其为@”响应者对象”UIApplication,UIViewController,UIView都继承自UIResponder,因此他们都是响应者对象,能够处理事件。

UIResponder

  UIResponder内部提供了方法来处理事件

一次完整的触摸过程,会经历3个状态

UIView的触摸事件处理

1、开始触摸view,系统会调用view下面的方法:

– (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;

2、手指在View上移动,系统会调用下面的方法(随着手指的移动,会持续调用该方法)

– (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;

3、触摸结束,系统会调用view的下面方法:

– (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;

4、触摸结束前,某个系统事件(例如电话呼入)会打断触摸过程,系统会自动调用view下面的方法

– (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;

四个触摸事件的处理方法中,都有NSSet * touches 和 UIEvent * event 两个参数

1、一次完整的触摸过程,只会产生一个事件对象,4个触摸方法都是同一event参数

2、如果两根手指同时触摸一个view,那么view只会调用一次 touchesBegan:withEvent: 方法,touches参数中装着两个UITouch对象;

3、如果这两根手指一前一后分开触摸同一个view,那么view会分别调用两次 touchesBegan:withEvent:方法, 并且每次调用时的touches参数只包含一个UITouch对象;

4、根据touches中UITouch个数可以判断出使单点触摸还是多点触摸。

提示:touches中存放的都是UITouch对象。

UIView不接收触摸事件的三种情况:

1> 不接受用户交互 :userInteractionEnable = NO;

2> 隐藏 :hidden = YES;

3> 透明:alpha = 0.0 ~ 0.01

提示:UIImageView的userInteractionEnable默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的。

响应者链的事件传递过程:

1> 如果view的控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它的父视图;

2> 在视图层次结构最顶级的视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理。

3> 如果window对象也不处理,则其将事件或消息传递给UIApplication对象;

4> 如果UIApplication也不能处理该事件或消息,则将其丢弃。

监听触摸事件的做法

如果想监听一个view上面的触摸事件,之前的做法是:

1> 自定义一个view;

2> 实现view的touches方法,在方法内部实现具体处理代码。

通过touches方法监听view触摸事件,有很明显的几个缺点:

1> 必须得自定义view;

2> 由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件;

3> 不容易区分用户的具体手势行为。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297