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

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

【學習筆記】響應者鏈條

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

  自學iOS有一兩個月了,一直沒有好好整理學習筆記,打算今天開始慢慢補上,就當是復習和補缺補漏吧。

 

  iOS的事件大致分為三種:觸摸事件、加速計事件、遠程控制事件

  首先要理解以下幾個概念:

  一、響應者對象:

    iOS中不是任何對象都能處理事件,只有繼承了UIResponder的對象才能接收并處理事件。我們稱之為響應者對象”。

    UIapplicationUIViewControllerUIView都繼承自UIResponder,因此它們都是響應者對象,都能夠接收并處理事件。

  二、UIResponder處理事件的主要方法

    觸摸事件    

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

    加速計事件

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event;

    遠程控制事件

- (void)remoteControlReceivedWithEvent:(UIEvent *)event;

  三、UITouch

    用戶同時觸摸的手指,每一根就代表一個UITouch對象,它保存著跟手指相關的信息,比如觸摸的位置、時間、階段。

    當手指移動(move)時,系統會更新同一個UITouch對象,使之能夠一直保存該手指在的觸摸位置。

    當手指離開(end)屏幕時,系統會銷毀相應的UITouch對象.

 

  四、UIEvent

    觸摸事件發生,必須會產生一個UIEvent對象,稱為事件對象,記錄事件產生的時刻類型。

 

  五、首先處理事件的響應者

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

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

    主窗口會在視圖層次結構中找到一個最合適的視圖來處理觸摸事件,這也是整個事件處理過程的第一步

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

    touchesBegan…

    touchesMoved…

    touchedEnded…

    

    下面是老師上課的PPT示例,說的很明白。

  

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

  1.alpha= 0.0 ~ 0.01

  2.hidden屬性=YES

  3.userInteractionEnabled=YES

  注意:UIImageViewuserInteractionEnabled默認就是NO,因此UIImageView以及它的子控件默認是不能接收觸摸事件的

 

  六、響應者鏈條

    合適的控件調用touches方法后,會默認地將事件順著響應者鏈條向上傳遞,將事件交給上一個響應者進行處理。

  尋找上一個響應者的過程,看起來是尋找首要合適控件的逆過程。

  當前響應者的touches方法中如果調用[super touches],就會對用上一個響應者touches方法,同時可以將UITouch對象和UIEvent對象向上傳遞。

  這樣就能夠將一次觸摸事件的事件對象和觸摸對象的信息傳遞給多個響應者。

 

  問題:上一個響應者(nextResponder)是誰?

  判斷步驟:
  1>如果當前的view是控制器的view,控制器就是上一個響應者
  2>如果當前的view不是控制器的view,那么父控件就是上一個響應者
  3>如果當前響應者是控制器,那么上一個響應者是UIWindow;如果UIWindow也不處理,就再往上傳給UIApplication
  4>如果UIApplication也不處理,那么這條消息就被會廢棄

  

  七、觸摸事件處理過程

  1.用戶觸摸后,系統先將事件對象(event)由上往下傳遞(父控件傳給子控件),找到最合適的控件來處理事件(遞歸查找當前控件的最適合子控件)

  2.調用合適控件的touches相關方法

  3.如果調用了super的touches相關方法,就會將事件順著響應者鏈條往上傳遞,傳給上一個響應者

  4.接著就會調用上一個響應者的touches方法

  5.只要當前響應者的touches方法中調用了super的touches方法,還會繼續往上遞歸調用,直到不再調用super的touches方法

 

  八、補充面試題:什么是響應者鏈條?

  以下幾個點是李明杰老師給的參考回答,可學習借鑒:

  1>響應者鏈條是由多個響應者對象連接起來的鏈條

  2>響應者對象是指能夠處理事件的對象,即繼承UIResponder的對象

  3>利用響應者鏈條,能讓多個控件處理同一個觸摸事件

  4>簡要敘述響應者鏈條的往上傳遞,找到上一個響應者(nextResponder)

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 一区国产精品 | 久草在线观看首页 | 国内久久久久 | 99精品视频在线免费观看 | av在线1| 欧美日韩国产成人在线观看 | 第四色成人网 | 人人做人人看 | 国产成年人视频 | 鲁丝片一区二区三区免费入口 | 欧美亚洲综合在线 | 国产做爰全免费的视频黑人 | 国产午夜精品理论片a级探花 | 国产欧美精品一区二区三区四区 | 一级做a爱视频 | 宅男噜噜噜66国产免费观看 | 亚洲性生活视频 | 18一20岁一级毛片 | 成人午夜视频在线观看 | 亚洲欧洲日韩av | 激情小说激情电影 | 久久成人午夜视频 | 欧美黄在线| 91在线视频网址 | 国产精品久久久久久影院8一贰佰 | 久久人人97超碰国产公开结果 | 久久精品国产99久久久古代 | 久久99精品视频在线观看 | 大片毛片| 国产精品毛片无码 | 成人黄色小视频在线观看 | 亚洲免费资源 | arabxxxxvideos| 一区二区三区视频在线播放 | 日韩字幕在线观看 | 免费在线看a| 午夜色视频在线观看 | 免费观看国产精品视频 | 日韩av在线网 | 国产成人av在线播放 | 日韩视频一区二区三区四区 |