你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 淺析iOS中的觸摸事件

淺析iOS中的觸摸事件

編輯:IOS開發基礎

在用戶使用app的過程中,會產生各種各樣的事件,在 iOS 中的事件大致可以分為3大類型:

  • 觸摸事件

  • 加速計事件

  • 遠程控制事件

    觸摸事件
  • 2997426-ec6305a776be265e.png

一、什麼是響應者對象?

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

UIApplication、UIViewController、UIView都繼承自UIResponder,因此它們都是響應者對象,都能夠接收並處理事件。

二、為什麼說繼承了 UIResponder 就能夠處理事件?

因為在UIResponder內部提供了以下方法來處理事件:

  • 監聽 UIView 的觸摸事件,會調用以下方法:

//一根或者多根手指開始觸摸view,系統會自動調用view的touchesBegan方法
 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;//一根或者多根手指在view上移動時,系統會自動調用view的touchesMoved方法//(隨著手指的移動,會持續調用該方法,也就是說這個方法會調用很多次)
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;//一根或者多根手指離開view,系統會自動調用view的touchesEnded方法
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;//當觸摸序列被諸如電話呼入這樣的系統事件所取消時,系統會調用touchesCancelled方法
 - (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;

想要監聽UIViiew的觸摸事件,首先要自定義UIView,只有實現了UIResponder的事件方法才能夠監聽事件。

提示: touches 中存放的都是 UITouch 對象

三、觸摸事件中的 UITouch

當用戶用一根手指觸摸屏幕時,會創建一個與手指相關聯的 UITouch 對象,一根手指對應一個 UITouch 對象。

  • UITouch 的作用

    • 保存跟手指有關的信息,比如觸摸的位置、時間、階段

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

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

  • UITouch 的方法

- (CGPoint)locationInView:(UIView *)view;//返回值表示觸摸在view上的位置//這裡返回的位置是針對view的坐標系的(以view的左上角為原點(0, 0))//調用時傳入的view參數為nil的話,返回的是觸摸點在UIWindow的位置- (CGPoint)previousLocationInView:(UIView *)view;//該方法記錄了前一個觸摸點的位置
四、觸摸事件中的 UIEvent

UIEvent 稱為事件對象,負責記錄事件產生的時刻和類型,每產生一個事件,就會產生一個 UIEvent 對象。

在 UIEvent 中提供了相應的方法可以獲取在某個 View 上面的觸摸對象(UITouch)。

在一次完整的觸摸過程中,至少會經歷開始、移動、結束三個狀態,在觸摸事件處理方法中,都有 touchesevent 兩個參數。

觸摸事件的總結:

  1. 一次完整的觸摸過程中,只會產生一個事件對象,4個觸摸方法都是同一個 event 參數。

  2. 如果兩根手指同時觸摸一個view,那麼view只會調用一次touchesBegan:withEvent:方法,touches參數中裝著2個UITouch對象。

  3. 如果這兩根手指一前一後分開觸摸同一個view,那麼view會分別調用2次touchesBegan:withEvent:方法,並且每次調用時的touches參數中只包含一個UITouch對象。

  4. 根據touches中UITouch的個數可以判斷出是單點觸摸還是多點觸摸。



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