1. 程式人生 > >HITEST使用擴大點選區域 超出父檢視響應點選事件

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