UIEvent狂秘、UITouch、手勢等等

1.什么是UIEvent

UIEvent代表iOS系統(tǒng)中的一個事件躯肌,可以分為三類:UIEventTypeTouches觸摸事件者春、UIEventTypeMotion運動事件、UIEventTypeRemoteControl遠程事件清女。

UIEventTypeTouches觸摸事件钱烟,通過點擊,拖拽,縮放等等觸發(fā)拴袭。

UIEventTypeMotion運動事件传惠,通過搖晃屏幕等觸發(fā)。

UIEventTypeRemoteControl通過遠程事件控制稻扬,或者耳機等觸發(fā)。

UIEvent繼承于NSObject.

2.什么是UIResponder

在iOS當中羊瘩,只有繼承自UIResponder的類才能處理各種事件泰佳。

我們常用的UIView、UIViewController尘吗、UIApplication都繼承自UIResponder逝她,它們都能接收并處理事件。

@interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem, UITraitEnvironment, UICoordinateSpace, UIFocusEnvironment>

UIResponder中提供了處理上述三種UIEvent的方法睬捶,根據(jù)事件的類型有不同的處理方法黔宛。

3.什么是UITouch

當用戶的一根手指觸摸屏幕的時候會創(chuàng)建一個對應的UITouch,這個UITouch會記錄手指運動的信息擒贸,比如說位置臀晃,時間,階段等等介劫。手指在屏幕的時候系統(tǒng)會更新同一個UITouch對象徽惋,如果手指離開了屏幕,這個UITouch對象就被銷毀了座韵。

我們可以發(fā)現(xiàn)處理點擊事件的方法里有兩個參數(shù)险绘。

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event

??:一次完整的觸摸事件只會產(chǎn)生一個UIEvent對象,也就是說不管手指在屏幕上怎么移動都是一個UIEvent對象誉碴。

而touches這個NSSet里面宦棺,裝著的是UITouch對象,從這個里面可以看出是單點觸摸還是多點觸摸黔帕。也就是說兩個手指同時觸摸屏幕代咸,那么touches里就有兩個UITouch對象。

4.Gesture Recognizer

??:如果有事件到來時成黄,視圖有附加的手勢識別器侣背,則手勢識別器優(yōu)先處理事件。如果手勢識別器沒有處理事件慨默,則將事件交給視圖處理贩耐,視圖如果未處理則順著響應者鏈繼續(xù)向后傳遞。

也就是說手勢識別器的優(yōu)先級高于事件處理厦取。如果手勢在事件響應鏈中潮太,那么手勢會把這個響應鏈打斷。

????:比如說現(xiàn)在有兩個view,viewb在viewa的上面铡买,兩個view都添加了手勢更鲁,那么我們點擊viewa的時候可以響應,但是點擊viewb的時候就沒有響應了奇钞,這就是因為viewa上添加了手勢打斷了響應鏈澡为,所以viewb響應不到這個點擊事件了。

5.UIControl

UIControl對于事件的處理會打破上面的規(guī)則景埃。

????:比如在viewa上添加了一個button媒至,給這個button和這個views都添加了手勢,那么views和button的手勢都可以響應谷徙。因為UIButton繼承于UIControl拒啰,也就是說如果UIButton是第一響應者,他的事件是由UIApplication直接派發(fā)的完慧,不通過響應鏈傳遞谋旦,如果不能處理再交給響應鏈。

而如果是剛才那種情況屈尼,給UIButton addTarget的話册着,這個target是不會被響應的。

所以說這個action會因為父類的響應鏈被打斷而無法執(zhí)行脾歧,而gesture不會因為父類的響應鏈被打斷而無法執(zhí)行指蚜。

6.事件響應邏輯

當事件到來時,會通過hitTest和pointInside兩個方法涨椒,從Window開始向上面的視圖查找摊鸡,找到第一響應者的視圖。找到第一響應者后蚕冬,系統(tǒng)會判斷其是繼承自UIControl還是UIResponder免猾,如果是繼承自UIControl,則直接通過UIApplication直接向其派發(fā)消息囤热,并且不再向響應者鏈派發(fā)消息猎提。

如果是繼承自UIResponder的類,則調(diào)用第一響應者的touchesBegin旁蔼,并且不會立即執(zhí)行touchesEnded锨苏,而是調(diào)用之后順著響應者鏈向后查找。如果在查找過程中棺聊,發(fā)現(xiàn)響應者鏈中有的視圖添加了手勢伞租,則進入手勢的代理方法中,如果代理方法返回可以響應這個事件限佩,則將第一響應者的事件取消葵诈,并調(diào)用其touchesCanceled方法份帐,然后由手勢來響應事件辐啄。

如果手勢不能處理事件焕参,則交給第一響應者來處理霞势。如果第一響應者也不能響應事件,則順著響應者鏈繼續(xù)向后查找泞坦,直到找到能夠處理事件的UIResponder對象窖贤。如果找到UIApplication還沒有對象響應事件的話,則將這次事件丟棄贰锁。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赃梧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子李根,更是在濱河造成了極大的恐慌,老刑警劉巖几睛,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件房轿,死亡現(xiàn)場離奇詭異,居然都是意外死亡所森,警方通過查閱死者的電腦和手機囱持,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來焕济,“玉大人纷妆,你說我怎么就攤上這事∏缙” “怎么了掩幢?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長上鞠。 經(jīng)常有香客問我际邻,道長,這世上最難降的妖魔是什么芍阎? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任世曾,我火速辦了婚禮,結(jié)果婚禮上谴咸,老公的妹妹穿的比我還像新娘轮听。我一直安慰自己,他們只是感情好岭佳,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布血巍。 她就那樣靜靜地躺著,像睡著了一般珊随。 火紅的嫁衣襯著肌膚如雪藻茂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音辨赐,去河邊找鬼优俘。 笑死,一個胖子當著我的面吹牛掀序,可吹牛的內(nèi)容都是我干的帆焕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼不恭,長吁一口氣:“原來是場噩夢啊……” “哼叶雹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起换吧,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤折晦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沾瓦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體满着,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年贯莺,在試婚紗的時候發(fā)現(xiàn)自己被綠了风喇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡缕探,死狀恐怖魂莫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爹耗,我是刑警寧澤耙考,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站潭兽,受9級特大地震影響琳骡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讼溺,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一楣号、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怒坯,春花似錦炫狱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至归敬,卻和暖如春酷含,著一層夾襖步出監(jiān)牢的瞬間鄙早,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工椅亚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留限番,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓呀舔,卻偏偏與公主長得像弥虐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子媚赖,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 在開發(fā)過程中霜瘪,大家或多或少的都會碰到令人頭疼的手勢沖突問題,正好前兩天碰到一個類似的bug惧磺,于是借著這個機會了解了...
    閆仕偉閱讀 5,324評論 2 23
  • 在iOS開發(fā)中經(jīng)常會涉及到觸摸事件颖对。本想自己總結(jié)一下,但是遇到了這篇文章磨隘,感覺總結(jié)的已經(jīng)很到位缤底,特此轉(zhuǎn)載。作者:L...
    WQ_UESTC閱讀 6,009評論 4 26
  • 好奇觸摸事件是如何從屏幕轉(zhuǎn)移到APP內(nèi)的琳拭?困惑于Cell怎么突然不能點擊了训堆?糾結(jié)于如何實現(xiàn)這個奇葩響應需求描验?亦或是...
    Lotheve閱讀 57,061評論 51 599
  • 系統(tǒng)響應階段 1.手指觸碰屏幕白嘁,屏幕感受到觸摸后,將事件交由IOKit來處理膘流。 2.IOKIT將觸摸事件封裝成IO...
    雪山飛狐_91ae閱讀 7,366評論 4 37
  • 該文章屬于劉小壯原創(chuàng)絮缅,轉(zhuǎn)載請注明:劉小壯[http://www.reibang.com/u/2de707c93d...
    劉小壯閱讀 32,079評論 32 209