麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

事件的傳遞及相應者鏈條

2019-11-14 18:51:53
字體:
來源:轉載
供稿:網友

  除去高大上的標題,本文主要就是講當你觸碰手機屏幕上任意點的時候,系統是怎樣找到那個需要響應該觸碰事件的控件,以及該控件對觸碰事件的響應情況

  首先是 找到應該響應該觸碰事件控件的過程:觸摸事件首先是被應用的消息循環機制檢測到,加入到消息隊列,到處理該消息時,由application向下問window,window又去問rootcontroller(這個觸摸點在沒在你的view范圍中),rootcontroller又問自己的view,view又向下問自己的所有子控件,進行篩選,

篩選的規則是:

1.自己是否能接收觸摸事件?
2.觸摸點是否在自己身上?
3.以上都滿足了就從后往前遍歷子控件,重復前面的兩個步驟
4.如果沒有符合條件的子控件,那么就自己最適合處理
這里的“問”默認是通過控件的- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event方法一層一層從外往內掉用;
   找到最后找到最適合處理該觸摸事件的控件,該控件默認會有對觸摸事件的處理:(以下就該是響應者鏈條的內容了)
根據控件對事件的默認響應情況,大概分三種(肯定不止):
1.button:默認會處理響應該事件,并且不會再調用 [super touchesBegan:touches withEvent:event];向上拋響應,這樣該響應鏈條就斷了;
2.uiview: 如果不實現uitouches方法,默認會調用父類(uiresponser)中的touches方法,該方法內部默認會自動把響應交給下一響應者處理;
3.uiimageview:默認是不與用戶交互的,所以該控件默認也就不會被選為最佳處理事件的控件,所以該種類不應該算;
如果控件自己實現了touches方法來處理觸摸事件,并且響應完又調用了[super touchesBegan:touches withEvent:event];來讓下一響應者繼續響應,這樣一層一層由里向外久構成了響應者鏈條;
 
  需要說明的是:響應者不都必然是view等控件,也可能是viewController等控制器(UIviewController也繼承于UIresponser);
找下一響應者的原則是
1>如果當前這個view事控制器的view,那么控制器就是上一個響應者(控制器也繼承了UIResponser,所有控制器也有touches……方法)
2>如果當前這個view不是控制器的view,那么父控件就是上一個響應者
 
響應者鏈的事件傳遞過程
1.如果view的控制器存在,就傳遞給控制器;如果控制器不存在,則將其傳遞給它的父視圖
2.在視圖層次結構的最頂級視圖,如果也不能處理收到的事件或消息,則其將事件或消息傳遞給window對象進行處理
3.如果window對象也不處理,則其將事件或消息傳遞給UIApplication對象
4.如果UIApplication也不能處理該事件或消息,則將其丟棄
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久久一区 | 亚洲精品无码不卡在线播放he | 天天色综合6 | 色综合久久久久久久久久 | 久久青草影院 | 国产精品毛片va一区二区三区 | 91香蕉影视 | 黄色成人小视频 | xxxxhd18hd日本hd| 99综合视频 | 日韩一级免费 | 黄污视频在线看 | 国产一国产一级毛片视频在线 | tube7xxx| av色偷偷| 成人福利视频导航 | 全黄性性激高免费视频 | 康妮卡特欧美精品一区 | 日本一区二区在线 | 欧美成人免费一级 | 国产精品久久久久久久久久iiiii | 欧美性猛交xxx乱大交3蜜桃 | 精品国产乱码一区二区三区四区 | 欧日韩在线 | 国产精品一区二区三区在线播放 | 999久久久 | 叉逼视频 | 久久成人激情视频 | 午夜视频免费在线观看 | 久久久免费观看完整版 | 久草在线高清 | 九九热视频在线免费观看 | 色淫影院 | a级高清免费毛片av在线 | 欧美日韩专区国产精品 | 国产欧美亚洲精品a | 一级国产航空美女毛片内谢 | www.com国产精品 | 91福利免费视频 | 精品中文一区 | 国产高潮好爽受不了了夜色 |