iOS開發中的事件處理(二)-事件傳遞,響應者鏈條-

來源:互聯網
上載者:User

iOS開發中的事件處理(二)-事件傳遞,響應者鏈條-

 

事件處理的事件傳遞簡介:

發生觸摸事件後,系統會將該事件加入到一個由UIApplication管理的事件 隊列中,UIApplication會從事件隊列中取出最前面的事件,並將事件分發下去以便處理,通常,先發送事件給應用程式的主視窗(keyWindow)

UIView不接受觸摸事件的三種情況:

不接收使用者互動
userInteractionEnabled = NO

隱藏
hidden = YES

透明
alpha = 0.0 ~ 0.01

提示:UIImageView的userInteractionEnabled預設就是NO,因此UIImageView以及它的子控制項預設是不能接收觸摸事件的

事件傳遞的詳細過程:
主視窗會在視圖階層中 找到一個最合適的視圖來處理觸摸事件,但是這僅僅是整個事件處理過程的第一步 找到合適的視圖控制項後,就會調用視圖控制項的touches方法來作具體的事件處理
touchesBegan…
touchesMoved…
touchedEnded… 這些touches方法的 預設做法是將事件順著 響應者鏈條向上傳遞,將事件交給 上一個響應者進行處理
樣本:

響應者鏈條

事件傳遞的完整過程
先將事件對象由上往下傳遞(由父控制項傳遞給子控制項),找到最合適的控制項來處理這個事件。 調用最合適控制項的touches….方法 如果調用了[super touches….];就會將事件順著響應者鏈條往上傳遞,傳遞給上一個響應者 接著就會調用上一個響應者的touches….方法
如何判斷上一個響應者
如果當前這個view是控制器的view,那麼控制器就是上一個響應者 如果當前這個view不是控制器的view,那麼父控制項就是上一個響應者
響應者鏈條的事件傳遞過程
如果view是控制器的view,就傳遞給控制器;如不是,則將其傳遞給它的父視圖 在視圖階層的最頂級視圖,如果也不能處理收到的事件或訊息,則其將事件或訊息傳遞給window對象進行處理 如果window對象也不處理,則其將事件或訊息傳遞給UIApplication對象 如果UIApplication也不能處理該事件或訊息,則將其丟棄
注意為什麼用隊列管理事件,而不用棧?

隊列先進先出,能保證先產生的事件先處理。棧先進後出。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.