事件的響應(yīng)

  • 事件響應(yīng)過(guò)和程?
    用戶點(diǎn)擊屏幕后產(chǎn)生的一個(gè)觸摸事件,經(jīng)過(guò)一系列的傳遞過(guò)程后,會(huì)找到最合適的視圖控件來(lái)處理這個(gè)事件,
    找到最合適的視圖控件后,就會(huì)調(diào)用控件的touches方法來(lái)作具體的事件處理
    那這些touches方法的默認(rèn)做法是將事件順著響應(yīng)者鏈條向上傳遞,將事件交給上一個(gè)響應(yīng)者進(jìn)行處理
  • 什么是響應(yīng)者鏈條?
    是由多個(gè)響應(yīng)者對(duì)象連接起來(lái)的鏈條.
  • 什么是響應(yīng)者對(duì)象?
    繼承了UIResponder對(duì)象我們稱之為響應(yīng)者對(duì)象,也就是能處理事件的對(duì)象
  • 事件傳遞與響應(yīng)的完整過(guò)程?
    在產(chǎn)生一個(gè)事件時(shí),系統(tǒng)會(huì)將該事件加入到一個(gè)由UIApplication管理的事件隊(duì)列中,
    UIApplication會(huì)從事件隊(duì)列中取出最前面的事件,將它傳遞給先發(fā)送事件給應(yīng)用程序的主窗口.
    主窗口會(huì)調(diào)用hitTest方法尋找最適合的視圖控件,找到后就會(huì)調(diào)用視圖控件的touches方法來(lái)做具體的事情.
    當(dāng)調(diào)用touches方法,它的默認(rèn)做法, 就會(huì)將事件順著響應(yīng)者鏈條往上傳遞,傳遞給上一個(gè)響應(yīng)者,接著就會(huì)調(diào)用上一個(gè)響應(yīng)者的touches方法
  • 如何去尋找上一個(gè)響應(yīng)者?
    1.如果當(dāng)前的View是控制器的View,那么控制器就是上一個(gè)響應(yīng)者.
    2.如果當(dāng)前的View不是控制器的View,那么它的父控件就是上一個(gè)響應(yīng)者.
    3.在視圖層次結(jié)構(gòu)的最頂級(jí)視圖,如果也不能處理收到的事件或消息,則其將事件或消息傳遞給window對(duì)象進(jìn)行處理
    4.如果window對(duì)象也不處理,則其將事件或消息傳遞給UIApplication對(duì)象
    5.如果UIApplication也不能處理該事件或消息,則將其丟棄
  • 事件傳遞的完整過(guò)程
    1.先將事件對(duì)象由上往下傳遞(由父控件傳遞給子控件),找到最合適的控件來(lái)處理這個(gè)事件。
    2.調(diào)用最合適控件的touches….方法
    3.如果調(diào)用了[supertouches….];就會(huì)將事件順著響應(yīng)者鏈條往上傳遞,傳遞給上一個(gè)響應(yīng)者
    4.接著就會(huì)調(diào)用上一個(gè)響應(yīng)者的touches….方法
    • 響應(yīng)者鏈條示意圖
      圖片 1.png

      注意:touches方法的系統(tǒng)默認(rèn)做法,是將事件傳遞給父控件,調(diào)用父控件的touches方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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