iOS開發UI篇—事件傳遞

來源:互聯網
上載者:User

標籤:style   class   blog   http   color   com   

iOS開發UI篇—事件傳遞

一、事件的產生和傳遞

發生觸摸事件後,系統會將該事件加入到一個由UIApplication管理的事件隊列中

UIApplication會從事件隊列中取出最前面的事件,並將事件分發下去以便處理,通常,先發送事件給應用程式的主視窗(keyWindow)

主視窗會在視圖階層中找到一個最合適的視圖來處理觸摸事件

找到合適的視圖控制項後,就會調用視圖控制項的touches方法來作具體的事件處理

touchesBegan…

touchesMoved…

touchedEnded…

 

二、事件傳遞過程樣本

觸摸事件的傳遞是從父控制項傳遞到子控制項

點擊了綠色的view:UIApplication -> UIWindow -> 白色 -> 綠色

點擊了藍色的view:UIApplication -> UIWindow -> 白色 -> 橙色 -> 藍色

點擊了黃色的view:UIApplication -> UIWindow -> 白色 -> 橙色 -> 藍色 -> 黃色

 

注意:如果父控制項不能接收觸摸事件,那麼子控制項就不可能接收到觸摸事件

如何找到最合適的控制項來處理事件?

(1)自己是否能接收觸摸事件?

(2)觸摸點是否在自己身上?

(3)從後往前遍曆子控制項,重複前面的兩個步驟

(4)如果沒有合格子控制項,那麼就自己最適合處理

樣本:

搭建如下介面,每個自訂的view分別用一個類來進行管理。

建立一個繼承自view的基類,讓其他的自訂view繼承自該類,在該類中重寫下面的代碼。

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

{

    NSLog(@"%@" , self.class);

}

 

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

(1)不接收使用者互動  userInteractionEnabled = NO

       

(2)隱藏  hidden = YES

(3)透明 alpha = 0.0 ~ 0.01

      

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.