你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開辟之觸摸事宜

iOS開辟之觸摸事宜

編輯:IOS開發綜合

1、事宜分發處置【由外到內】

在IOS中產生觸摸後,事宜會加到UIApplication事宜隊列,UIApplication會從事宜隊列掏出最後面的事宜停止分發處置,平日會先分發給主窗口,主窗口會挪用hitTest:withEvent:辦法,查找合適的事宜觸發視圖,即 找到被觸摸的視圖對象

尋覓流程以下:

  1. 在頂級視圖(keyWindow的視圖)上挪用pointInside:withEvent:辦法斷定觸摸點能否在以後視圖內;
  2. 假如前往NO,那末keyWindow的hitTest:withEvent:前往nil;
  3. 假如前往YES,那末它會向以後視圖的一切子視圖發送hitTest:withEvent:新聞,遍歷一切子視圖的次序是從subviews數組的末尾向前遍歷(從界面最上方開端向下遍歷);
  4. 假如有subview的hitTest:withEvent:前往非空對象,則keyWindow的hitTest:withEvent:前往此對象,處置停止;
  5. 假如一切subview遍歷停止依然沒有前往非空對象,則keyWindow的hitTest:withEvent:前往頂級視圖;
  6. 2、呼應者鏈條【由內到外】

    找到被觸摸的視圖對象後,還須要斷定該視圖對象能否能處置該觸摸事宜,假如不克不及處置,又該讓誰來處置,因而呼應者鏈條湧現,感化是 找到事宜呼應者

    呼應者鏈條准繩:

    1. 觸摸對象initalView沒法呼應事宜時,傳遞給下級視圖superView去呼應
    2. 假如下級視圖沒法呼應,持續往上傳遞
    3. 往上傳遞直到傳遞到視圖掌握器的根視圖controllerView,假如根視圖不呼應,傳遞給視圖掌握器viewController
    4. 視圖掌握器不呼應,傳遞給父視圖掌握器的根視圖superControllerView,假如根視圖不呼應,傳遞給父視圖掌握器superViewController
    5. 頂級視圖掌握器不克不及呼應,傳遞給主窗口keyWindow
    6. keyWindow不克不及呼應,傳遞給UIApplication處置
    7. UIApplication不克不及呼應,該事宜就會被 擯棄
    8. 3、繼續UIResponder

      以上 事宜分發 和 呼應者鏈條 ,都不須要我們關懷,這些操作是主動履行的,不須要我們去操作,我們只須要懂得它們的道理就行。
      在IOS中其實不是一切的類都能處置並接收事宜,只要繼續UIResponder的對象能力處置事宜(我們經常使用的UIView、UIViewController、UIApplication都繼續自UIResponder,它們都能吸收並處置事宜 ),但繼續UIResponder又不料味著必定能處置事宜

      繼續 UIResponder 的對象,不克不及處置事宜的情形:


      userInteractionEnabled = NO;
      hidden = YES;
      alpha = 0 ~ 0.01;

      沒有完成touchesBegan:withEvent辦法

      重寫UIResponder 觸摸呼應辦法:


      #pragma mark 觸摸開端時會挪用
      - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
      #pragma mark 觸摸挪動時會頻仍挪用
      - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
      #pragma mark 觸摸停止分開屏幕時會挪用
      - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
      #pragma mark 觸摸不測撤消時會挪用,好比觸摸時德律風打出去
      - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

      4、UITouch對象

      在 UIResponder 觸摸呼應辦法中,須要獲得 UITouch 對象:

      //獲得一個觸摸對象(關於多點觸摸能夠有多個對象)
      UITouch *touch = [touches anyObject];
      //獲得在指定視圖的觸摸地位
      CGPoint current = [touch locationInView:self.view];
      //獲得在指定視圖的前一個觸摸地位
      CGPoint previous = [touch previousLocationInView:self.view];

      其他經常使用屬性:

      window : 觸摸地點窗口
      view : 觸摸地點視圖
      tapCount : 短時光點擊次數

      懂得了這些,你便可以應用觸摸事宜做一些好玩的工作了,(^o^)/~,這裡就不列詳細代碼了。

      【iOS開辟之觸摸事宜】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved