《iOS事件触摸与手势》
2017-05-12 本文已影响0人
大兵_iOS
iOS事件触摸与手势
一、事件分发处理【由外到内】
在iOS中发生触摸后,事件会加到UIApplication事件队列,UIApplication会从事件队列取出最前面的事件进行分发处理,通常会先分发给主窗口,主窗口会调用hitTest:withEvent:方法,查找适合的事件触发视图,即 找到被触摸的视图对象
寻找流程如下:
在顶级视图(keyWindow的视图)上调用pointInside:withEvent:方法判断触摸点是否在当前视图内;
如果返回NO,那么keyWindow的hitTest:withEvent:返回nil;
如果返回YES,那么它会向当前视图的所有子视图发送hitTest:withEvent:消息,遍历所有子视图的顺序是从subviews数组的末尾向前遍历(从界面最上方开始向下遍历);
如果有subview的hitTest:withEvent:返回非空对象,则keyWindow的hitTest:withEvent:返回此对象,处理结束;
如果所有subview遍历结束仍然没有返回非空对象,则keyWindow的hitTest:withEvent:返回顶级视图;
常用属性的设计
<code> userInteractionEnabled = NO;
hidden = YES;
alpha = 0 ~ 0.01;
<code>