ios触摸事件的产生和传递
- 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中
- UIApplication会从事件队列中取出最前面的事件并将事件分发下去以便处理,通常先发送给应用程序的主窗口(keyWindow)
- 主窗口会在市图层次结构中找到一个最合适的视图来处理触摸事件
- 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理
- 触摸事件的传递是从父控件传递到子控件(如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件
UIView不能接收触摸事件的三种情况
1. 不接收用户交互:userInteractionEnabled = NO
2. 隐藏: hidden = YES;
3. 透明: alpha = 0.0~0.01;
提示:UIImageView的userInteractionEnabled默认NO,因此它及其子控件默认是不接收触摸事件的
如何找到最适合的控件来处理事件
1. 自己是否能接收触摸事件
2. 触摸点是否在自己身上
3. 从后往前遍历子控件,重复前面的两个步骤
4. 如果没有符合条件的子控件,那么就自己最适合处理