天天看點

視訊播放BUG記錄-事件傳遞響應問題

項目中有視訊播放子產品。在橫屏模式下(playerView是改變frame實作的橫屏)的點選事件存在BUG,點選橫屏螢幕,下層view會響應點選,這是不希望的結果。

原因:在事件傳遞的過程中,下層view是合适的響應者,是以響應。

解決方法:根據事件傳遞的原理,阻止下層view響應,設定

userInteractionEnabled

為 NO。

UIView不能接收事件的三種情況:

- 不接受使用者互動:userInteractionEnabled為 NO
- 隐藏,hidden為YES
- 透明,alpha為.-.

其中: 1. 如果父控件不能接收事件,其子控件也不能接收到事件
      2. 子控件超出父控件的部分,也不能接收事件
           

事件傳遞過程中,查找最合适的控件處理事件

1. 控件是否能接收事件?否,事件傳遞到此結束
2. 觸點是否在自己身上?否,事件傳遞到此結束
3. 從後往前周遊子控件subViews數組,重複前面的兩個步驟(子控件如果前兩步成立,則執行這一步)

4. 如果沒有符合條件的子控件,那麼就認為自己最合适處理
           

查找合适的view涉及到一下兩個方法:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;
           

在需要的時候可以重寫上面的兩個方法,改變控件的傳遞和接收。