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>