在ios中,事件UIEvent类来表示,当一个事件发生时,系统会搜集的相关事件信息,创建一个UIEvent对象,最后将该事件转发给应用程序对象(UIApplication)。日常生活中,主要有三种类型的事件:触摸事件,加速计事件以及远程遥控事件。下面是官方的一张图片:当用户通过以 ...
在ios中,事件UIEvent类来表示,当一个事件发生时,系统会搜集的相关事件信息,创建一个UIEvent对象,最后将该事件转发给应用程序对象(UIApplication)。日常生活中,主要有三种类型的事件:触摸事件,加速计事件以及远程遥控事件。下面是官方的一张图片:
当用户通过以上方式触发一个事件时,会将相应的事件对象添加到UIApplication的事件队列中。UIApplication会循环的从队列中拿出第一个事件来处理。首先将该事件分发给UIApplication 的主窗口对象(KeyWindow),然后由主窗口决定如何将事件交给最合适的响应者(UIResponder)来处理取决于事件的类型。这里主要分两种情况:
1、触摸事件:UIApplication通过一个触摸检测来决定最合适来处理该事件的响应者,一般情况下,这个响应者是UIView对象。
2、加速计事件或远程遥控事件:UIApplication寻找UIWindow中的第一响应者。找到第一响应者(The First Responder)后,会将该事件对象派发给该响应者以便处理。
下面分别讨论上述两种情况。
一、触摸事件中的触摸检测
首先我们需要明确一个UIView对象能够接收触摸事件至少要保证以下三个条件:
1、userInteractionEnabled属性为YES,该属性表示允许控件同用户交互。
2、Hidden属性为NO。控件都看不见,还触摸啥?
3、opacity属性值0 ~0.01,不能透明过分了吧?
接下来的我们仅仅认为该三个基本属性都满足要求,方便描述,当然对于不满足要求的自然是不能接收触摸说事件的。
当用户手指触摸到屏幕中的某一块区域时,UIWindow查找其子控件,然后通过调用所有自控件的方法:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
原标题:ios中的事件处理、响应者链条以及第一响应者
关键词:IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。