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
};
//觸控型別
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