標籤:
1.事件是怎麼樣產生與傳遞的?
當發生一個觸摸事件後,系統會將該事件加入到一個由UIApplication管理的事件隊列中.(隊列是先進先出,而棧是先進後出)
UIApplication會從事件隊列中取出最前面的事件,並將事件分發下去以便處理.首先交給主視窗keywindow去處理
主視窗會在視圖階層中找到一個最合適的視圖來處理觸摸事件,當找到最合適的view來處理事件時,該view會調用touchBegan等方法來對事件進行處理
2:時間傳遞的先後順序以及注意點:
觸摸事件的傳遞是從父控制項傳遞到子控制項的.
如果一個父控制項不能接收事件,那麼它裡面的了子控制項也不能夠接收事件.
3:一個控制項什麼情況下不能夠接收事件:
1.不接收使用者互動時不能夠處理事件:如果父控制項不能與使用者互動,那麼子控制項也不會接收到觸摸事件,那麼觸摸事件最後就會傳遞給父控制項的父控制項去處理
userInteractionEnabled = NO
2.當一個控制項隱藏的時候不能夠接收事件:當一個父控制項隱藏後,其上的子控制項也就會被隱藏,也就是父控制項不能接受觸摸事件的時候,其上的子控制項也不能接受觸摸事件
Hidden = YES的時候
3.當一個控制項為透明白時候也不能夠接收事件:當一個父控制項透明的時候,子控制項也會是透明的,當透明度在0.0 - 0.01之間的時候,該控制項不能去接受觸摸事件(透明度為0的時候,就是完全透明,0.0 - 0.01包含0.0和0.01這兩個值)
注意:UIImageView的userInteractionEnabled預設就是NO,
因此UIImageView以及它的子控制項預設是不能接收觸摸事件的
4:UIEvent:每產生一個事件就會產生產生一個UIEvent對象。UITouch為觸摸對象,一根手指觸摸就會產生一個UITouch對象,兩根手指觸摸就會產生兩個UITouch對象。UIEvent還提供了相應的方法獲得在某個view上的觸摸對象UITouch
5:事件的傳遞樣本:
1:事件的行程順序
2: 建立四個不同顏色的view,分別在四個view中實現touchbegan方法,1:四個view中有相同的代碼,則抽成父類直接在父類中實現touchbegan方法,讓子類去繼承,如何在父類中區分不同的子類,可以通過在父類中查看self.class來查看子類所屬的class,或是父類暴露type介面,子類去重寫父類的方法,則在父類中父類就可以根據賦值的type類型來判斷不同的子類,讓不同的子類在父類的方法中實現不同的方法。子類繼承父類後,就擁有了父類所有的代碼,若是想子類和父類發生關聯進行資料傳遞,則父類可以暴露方法供子類去重寫,1:子類可以重寫父類的方法獲得不同於父類的內容 2:父類暴露介面設定傳回值,子類重寫後,則父類就可以拿到子類重寫的方法中的傳回值(get方法介面)2:若是先建立了xib檔案,想把xib中的某個控制項封裝起來,則可以自訂xib中的類,繼承系統的類,然後來到xib中,對要封裝的控制項進行類的關聯:
1:1:當設定黃色view的userInteractionEnabled = NO,點擊黃色的view後,事件是由父控制項傳遞到子控制項,若父控制項不能接受事件,則子控制項也不能去接受事件(3個條件會使控制項不能接受點擊事件),事件由橙色--藍色,此時的view不能與使用者互動,所以事件不能傳遞到黃色的view處,只能傳遞到藍色的view,藍色view能處理事件,則會調用其touchBegan方法 2:當設定藍色view的userInteractionEnabled = NO,點擊黃色的view,事件只會傳遞到橙色的view處,藍色不能接受觸摸事件,所以事件不會傳到藍色view處,也就不會傳到黃色的view處。所以事件由橙色view去處理
2:1:如:UIImageView預設userInteractionEnabled = NO,UIImageView和其上的子控制項都不能接受到觸摸事件,預設在xib中是不能再UIImageView上添加子控制項的,可以通過代碼添加 2:還有一種就是透明度的設定,在0.0-0.01之間的透明度,父控制項透明子控制項也會透明,父控制項隱藏,則子控制項也會隱藏,則其父控制項和子控制項都不會接受到觸摸事件
ios開發事件處理之 :二:事件的產生與傳遞