首页 > 移动平台 > 详细

iOS开发UI篇—事件传递

时间:2015-04-11 19:17:04      阅读:269      评论:0      收藏:0      [点我收藏+]

 

一、事件的产生和传递

发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中

UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow)

主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件

找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理

touchesBegan…

touchesMoved…

touchedEnded…

 

二、事件传递过程示例

技术分享

触摸事件的传递是从父控件传递到子控件

点击了绿色的view:UIApplication -> UIWindow -> 白色 -> 绿色

点击了蓝色的view:UIApplication -> UIWindow -> 白色 -> 橙色 -> 蓝色

点击了黄色的view:UIApplication -> UIWindow -> 白色 -> 橙色 -> 蓝色 -> 黄色

 

注意:如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件

如何找到最合适的控件来处理事件?

(1)自己是否能接收触摸事件?

(2)触摸点是否在自己身上?

(3)从后往前遍历子控件,重复前面的两个步骤

(4)如果没有符合条件的子控件,那么就自己最适合处理

示例:

搭建如下界面,每个自定义的view分别用一个类来进行管理。

技术分享

新建一个继承自view的基类,让其他的自定义view继承自该类,在该类中重写下面的代码。

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

{

    NSLog(@"%@" , self.class);

}

 

三、不接受触摸事件的三种情况

(1)不接收用户交互  userInteractionEnabled = NO

 技术分享       技术分享

(2)隐藏  hidden = YES

技术分享

(3)透明 alpha = 0.0 ~ 0.01

技术分享       技术分享

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

iOS开发UI篇—事件传递

原文:http://www.cnblogs.com/panyangjun/p/4418069.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!