事件的分發(fā)和傳遞。
1.當(dāng)iOS程序中發(fā)生觸摸事件后,系統(tǒng)會(huì)將事件加入到UIApplication管理的一個(gè)任務(wù)隊(duì)列中
2.UIApplication將處于任務(wù)隊(duì)列最前端的事件向下分發(fā)。即UIWindow。
3.UIWindow將事件向下分發(fā),即UIView。
4.UIView首先看自己是否能處理事件,觸摸點(diǎn)是否在自己身上。如果能,那么繼續(xù)尋找子視圖。
5.遍歷子控件,重復(fù)以上兩步。
6.如果沒有找到,那么自己就是事件處理者。如果
7.如果自己不能處理,那么不做任何處理。
其中 UIView不接受事件處理的情況主要有以下三種
1)alpha <0.01
2)userInteractionEnabled = NO
3.hidden = YES.
這個(gè)從父控件到子控件尋找處理事件最合適的view的過程,如果父視圖不接受事件處理(上面三種情況),則子視圖也不能接收事件。事件只要觸摸了就會(huì)產(chǎn)生,關(guān)鍵在于是否有最合適的view來處理和接收事件,如果遍歷到最后都沒有最合適的view來接收事件,則該事件被廢棄。
作者:Maj_sunshine
鏈接:http://www.itdecent.cn/p/410ca78faa98
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
測試方法
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
return self;
}
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
return YES;
}