IOS開發之——事件的產生和處理

文章搬運來源:blog.csdn.net/Calvin_zhou…面試

做者:PGzxc(若有侵權,聯繫做者,當即刪除)markdown

對iOS開發感興趣,能夠看一下做者的iOS交流羣:812157648,你們能夠在裏面吹水、交流相關方面的知識,羣裏還有我整理的有關於面試的一些資料,歡迎你們加羣,你們一塊兒開車oop

一 事件的產生和處理

  • 發生觸摸事件後,系統會將該事件加入到一個由UIApplication管理的事件隊列中
  • UIApplication會從事件隊列中取出最前面的事件,並將事件分發下去以便處理,一般,先發送事件給應用程序的主窗口(keyWindow)
  • 主窗口會在視圖層次結構中找到一個最合適的視圖來處理觸摸事件,可是這僅僅是整個事件處理過程當中的第一步
  • 找到合適的視圖控件後,就會調用視圖控件的touches方法來做具體的事件處理
- touchesBegan..
- touchesMoved..
- touchesEnded..

複製代碼

二 事件傳遞示例

2.1 界面佈局

2.2 界面關係說明

  • BaseView:繼承自UIView,複寫touchesBegan方法
  • WhiteView:繼承自BaseView,是窗體的View
  • GreenView:繼承自BaseView,是2號綠色窗體的View
  • OrangeView:繼承自BaseView,是2號橙色窗體的View
  • BlueView:繼承自BaseView,是3號藍色窗體的View
  • RedView:繼承自BaseView,是3號紅色窗體的View
  • YellowView:繼承自BaseView,是4號黃色窗體的View

2.3 代碼(BaseView -touchesBegan)

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    NSLog(@"%@",[self class]);
}

複製代碼

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

  • 點擊了綠色的view:UIApplication—>UIWindow—>白色—>綠色
  • 點擊了藍色的view:UIApplication—>UIWindow—>白色—>橙色—>藍色
  • 點擊了黃色的view:UIApplication—>UIWindow—>白色—>橙色—>藍色—>黃色

2.5 說明

  • 若是父空間不能接收觸摸事件,那麼子控件就不可能接收到觸摸事件

三 UIVIew不接收觸摸事件的三種狀況

3.1 不接收用戶交互

userInteractionEnabled=NO

複製代碼

3.2 隱藏

hidden=YES

複製代碼

3.3 透明

aplpa=0.0~0.01

複製代碼

提示:UIImageView的userInteractionEnabled默認就是NO,所以UIImageView以及它的子控件默認是不能接收觸摸事件的佈局

四 如何找到最合適的控件來處理事件

  • 本身是否能接收觸控事件?否,事件傳遞到此結束
  • 觸摸點是否在本身身上?否,事件傳遞到此結束
  • 從後往前遍歷子控件,重複前面的兩個步驟
  • 若是沒有符合條件的子控件,那麼就本身最合適處理
相關文章
相關標籤/搜索