響應者鏈
響應者鏈是由一個一個響應者組成的長鏈缤底;
響應者鏈定義了iOS中觸摸事件的交互規(guī)則;
如果hit-test檢測出的view沒有響應事件慷丽,事件就會沿著響應者鏈往下傳遞嗽仪;
如果鏈中某個響應者響應了事件或者已經(jīng)沒有響應者了,傳遞就會結束泰佳。
觸摸檢測(Hit-Test)
通過觸碰檢測找出Touch發(fā)生在哪個視圖上盼砍,遞歸檢測所有子視圖,定位準確位置乐纸;
如果觸摸發(fā)生在E上衬廷;
Touch在A Bounds內(nèi);
檢測子視圖B和C汽绢;
如果Touch沒在B里吗跋,在C里;
檢測D和E宁昭;
Touch沒在D里跌宛,在E里,且E沒子視圖积仗。
調(diào)整事件傳遞
關閉事件的傳遞:userInteractionEnable 屬性設置為NO疆拘,此屬性是UIView的,所有子類都能設置寂曹。當視圖hidden屬性為YES或者alpha為0時哎迄,視圖也不接受事件回右。
在一定時間內(nèi)關閉事件傳遞:應用程序調(diào)用UIApplication的benginIgnoringInteractionEvents和endIgnoringInteractionEvents.
UIEvent
UIEvent:事件,是由硬件捕獲到的一個表示用戶操作設備的對象漱挚;
事件分為三類:觸摸事件翔烁、晃動事件、遠程控制事件旨涝;
UIResponder
UIResponder:響應者蹬屹,是可以響應事件并且可以對其進行處理的對象;
UIResponder是響應者的基類白华,UIApplication慨默、UIView和所有從UIView派生出來的子類都是源自它;
第一響應者是當前正在接受事件的響應者對象弧腥。
UITouch
UITouch:手指厦取,表示觸摸事件的一個手指;
UIView支持觸摸事件鸟赫,而且支持多點觸摸蒜胖;
需要定義UIView子類,實現(xiàn)觸摸相關的方法抛蚤;
touchesBegan:withEvent://開始觸摸
touchesMoved:withEvent://手指移動
touchesEnded:withEvent://結束觸摸
touchesCancelled:withEvent://觸摸終端
locationInView://當前手指位置
previousLocationView://上一次手指位置
iOS默認的是單點觸摸,如果想要支持多點觸摸寻狂,需要將multipleTouchEnabled 設置為YES岁经,默認是NO。
總結iOS 視圖不響應點擊事件的可能性:
view的userInteractionEnable 沒有設置為YES蛇券;
子視圖 超過 父視圖的顯示區(qū)域缀壤;
當視圖hidden屬性為YES或者alpha為0時;
其他歡迎補充纠亚。
本文轉自:李劍飛的技術博客
原文 http://lijianfei.sinaapp.com/?p=599