讓 Touch Events 不被上方的透明 UIView 擋住
之前在做專案的時候有發生,透明的 UIView 會擋住底層的 touch 事件。原因是當 touch event 觸發的時候,是以最上方可互動的 UI control 為優先,但是還是有辦法可以穿過的。
解法
解法就是在需要穿透的 UIView subclass 中 override UIView
的 pointInside:withEvent:
method 來改變觸控到時的行為。
設定觸發 Touch Event 的條件
根據 Apple 的 Documentation (ref.) 中提到,這個 method 會回傳 BOOL value 。回傳 YES 則可以觸發該 view 的 touch event。
因此根據我的需求(透明的不要觸發)就設下以下條件,就會觸發 touch event ,如果沒有符合條件,則會自動再往後面一層的 UIView 觸發 touch event:
- view 不是 hidden
- view 的 alpha 大於 0
- view 可以互動 (userInteractionEnabled == YES)
- view 可以接收這個 touch event
1 | // In a UIView subclass |
這樣就可以讓 touch events 穿過任何透明或無法互動的 UIControl
了。