1. 程式人生 > >UITouch【觸控】屬性及方法

UITouch【觸控】屬性及方法

UITouch.h【觸控】

//當用戶用一根手指觸控式螢幕幕時,會建立一個與手指相關聯的UITouch物件,一根手指對應一個UITouch物件

//UITouch的作用儲存著跟手指相關的資訊,比如觸控的位置、時間、階段

//當手指移動時,系統會更新同一個UITouch物件,使之能夠一直儲存該手指在的觸控位置,當手指離開螢幕時,系統會銷燬相應的UITouch物件

//提示:iPhone開發中,要避免使用雙擊事件!

//當手指接觸到螢幕,不管是單點觸控還是多點觸控,事件都會開始,直到使用者所有的手指都離開螢幕。期間所有的UITouch物件都被包含在UIEvent事件物件中,由程式分發給處理者。事件記錄了這個週期中所有觸控物件狀態的變化。

//只要螢幕被觸控,系統就會報若干個觸控的資訊封裝到UIEvent物件中傳送給程式,由管理程式UIApplication物件將事件分發。一般來說,事件將被髮給主視窗,然後傳給第一響應者物件(FirstResponder)處理。

@class UIWindow, UIView,UIGestureRecognizer;

//觸控狀態

typedef NS_ENUM(NSInteger,UITouchPhase) {

    UITouchPhaseBegan,             //觸控開始.

    UITouchPhaseMoved,             //接觸點移動.

    UITouchPhaseStationary,        //

接觸點無移動.

    UITouchPhaseEnded,             //觸控結束.

    UITouchPhaseCancelled,         //觸控取消

};

//iOS9中提供如下的介面用於檢查裝置是否支援3D Touch

typedef NS_ENUM(NSInteger,UIForceTouchCapability) {

   UIForceTouchCapabilityUnknown = 0,     //3D Touch檢測失敗

    UIForceTouchCapabilityUnavailable = 1//3D Touch不可用

    UIForceTouchCapabilityAvailable = 2

     //3D Touch可用

};

//觸控型別

typedef NS_ENUM(NSInteger,UITouchType) {

    UITouchTypeDirect,                       //直接觸控

    UITouchTypeIndirect,                     // 間接觸控

    UITouchTypeStylus NS_AVAILABLE_IOS(9_1),// 觸控

}NS_ENUM_AVAILABLE_IOS(9_0);

//觸控特性

typedef NS_OPTIONS(NSInteger,UITouchProperties) {

    UITouchPropertyForce = (1UL <<0),      //力度

    UITouchPropertyAzimuth = (1UL <<1),    //方位

    UITouchPropertyAltitude = (1UL <<2),   //高度

    UITouchPropertyLocation = (1UL <<3),   //位置

} NS_AVAILABLE_IOS(9_1);

@interface UITouch : NSObject

//時間戳記錄了觸控事件產生或變化時的時間。單位是秒。

@property(nonatomic,readonly) NSTimeInterval      timestamp;

//觸控事件在螢幕上有一個週期,即觸控開始、觸控點移動、觸控結束,還有中途取消。通過phase可以檢視當前觸控事件在一個週期中所處的狀態。

@property(nonatomic,readonly) UITouchPhase        phase;

//輕擊(Tap)操作和滑鼠的單擊操作類似,tapCount表示短時間內輕擊螢幕的次數。因此可以根據tapCount判斷單擊、雙擊或更多的輕擊。

@property(nonatomic,readonly) NSUInteger          tapCount;

//觸控的型別

@property(nonatomic,readonly) UITouchType         type NS_AVAILABLE_IOS(9_0);

//觸控的半徑

@property(nonatomic,readonly) CGFloat majorRadiusNS_AVAILABLE_IOS(8_0);

//觸控半徑的容差(點)。

@property(nonatomic,readonly) CGFloatmajorRadiusTolerance NS_AVAILABLE_IOS(8_0);

//觸控產生時所處的視窗。由於視窗可能發生變化,當前所在的視窗不一定是最開始的視窗。

@property(nullable,nonatomic,readonly,strong) UIWindow                        *window;

//觸控產生時所處的檢視。由於檢視可能發生變化,當前檢視也不一定時最初的檢視。

@property(nullable,nonatomic,readonly,strong) UIView                          *view;

//正在接收觸控物件的手勢識別。

@property(nullable,nonatomic,readonly,copy)   NSArray <UIGestureRecognizer *>*gestureRecognizers NS_AVAILABLE_IOS(3_2);

//現在觸控的座標//函式返回一個CGPoint型別的值,表示觸控在view這個檢視上的位置,這裡返回的位置是針對view的座標系的。呼叫時傳入的view引數為空的話,返回的時觸控點在整個視窗的位置。

-(CGPoint)locationInView:(nullable UIView *)view;

//上一次觸控的座標//該方法記錄了前一個座標值,函式返回也是一個CGPoint型別的值,表示觸控在view這個檢視上的位置,這裡返回的位置是針對view的座標系的。呼叫時傳入的view引數為空的話,返回的時觸控點在整個視窗的位置。

-(CGPoint)previousLocationInView:(nullable UIView *)view;

//現在觸控的精確的座標

-(CGPoint)preciseLocationInView:(nullable UIView *)viewNS_AVAILABLE_IOS(9_1); 

//上一次觸控的精確的座標

-(CGPoint)precisePreviousLocationInView:(nullable UIView *)viewNS_AVAILABLE_IOS(9_1);

//觸控的力度

@property(nonatomic,readonly) CGFloat forceNS_AVAILABLE_IOS(9_0);

//觸控的最大的力度

@property(nonatomic,readonly) CGFloatmaximumPossibleForce NS_AVAILABLE_IOS(9_0);

//沿著x軸正向的方位角,當與x軸正向方向相同時,該值為0;view引數為nil時,預設為keyWindow返回觸針的方位角(弧度)。

-(CGFloat)azimuthAngleInView:(nullable UIView *)viewNS_AVAILABLE_IOS(9_1);

//當前觸控物件的方向上的單位向量view引數為nil時,預設為keyWindow返回在觸針的方位角的方向指向的單位向量。

-(CGVector)azimuthUnitVectorInView:(nullable UIView *)viewNS_AVAILABLE_IOS(9_1);

//當筆平行於平面時,該值為0

//當筆垂直於平面時,該值為Pi / 2

//觸針的高度(單位為弧度)。

@property(nonatomic,readonly) CGFloat altitudeAngleNS_AVAILABLE_IOS(9_1);

//當每個觸控物件的觸控特性發生變化時,該值將會單獨增加,返回值是NSNumber 索引號,讓您關聯與原來的觸控更新的聯絡

@property(nonatomic,readonly) NSNumber *_Nullable estimationUpdateIndexNS_AVAILABLE_IOS(9_1);

//當前觸控物件估計的觸控特性,返回值是UITouchPropertyies一組觸控屬性,這些屬性將得到更新。

@property(nonatomic,readonly) UITouchPropertiesestimatedProperties NS_AVAILABLE_IOS(9_1);

//一組期望在未來的更新報文的觸控效能。

@property(nonatomic,readonly) UITouchPropertiesestimatedPropertiesExpectingUpdates NS_AVAILABLE_IOS(9_1);

@end