HITEST使用擴大點選區域 超出父檢視響應點選事件
點選螢幕或者點選一個btn會發生什麼? 傳遞鏈 響應者鏈。
在響應連中在找到最合適的響應者需要經過以下兩個方法:
這兩個方法的作用:尋找最適合的View
1.hitTest方法
引數:當前手指所在的點和產生的事件
返回值:返回誰, 誰就是最適合的View.
什麼時候用呼叫:只要一個事件,傳遞給一個控制元件時, 就會呼叫這個控制元件的hitTest方法
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
2.pointInside方法
作用:判斷point在不在方法呼叫者上
point:必須是方法呼叫者的座標系
什麼時候呼叫:hitTest方法底層會呼叫這個方法,判斷點在不在控制元件上.
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
return YES;
}
如果子控制元件不在父檢視部分則返回NO,無法響應事件。
if(self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01)
//隱藏 關閉互動 透明度小於 0.01 不響應事件。但是通過hitest讓其返回yes可以響應事件 詳見demo;
return nil;
hitTest可以擴大空間的熱區和讓點選事件透過到下一層;
這個一般在需要擴大控制元件或檢視點選區域 或者 當子控制元件超出父檢視 需要子控制元件響應點選事件時使用。
demo中包含擴大點選區域和超出父檢視部分響應事件:
demo:https://github.com/YST521/Hittest.git
其他先相關部落格:
https://blog.csdn.net/imkata/article/details/78767285
https://blog.csdn.net/j_akill/article/details/46888311