UITouch相关属性以及方法解释

2020-04-26  本文已影响0人  恋空K

//当用户用一根手指触摸屏幕时,会创建一个与手指相关联的UITouch对象,一根手指对应一个UITouch对象

//UITouch的作用保存着跟手指相关的信息,比如触摸的位置、时间、阶段

//当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指在的触摸位置,当手指离开屏幕时,系统会销毁相应的UITouch对象

//提示:iPhone开发中,要避免使用双击事件!

//当手指接触到屏幕,不管是单点触摸还是多点触摸,事件都会开始,直到用户所有的手指都离开屏幕。期间所有的UITouch对象都被包含在UIEvent事件对象中,由程序分发给处理者。事件记录了这个周期中所有触摸对象状态的变化。

//只要屏幕被触摸,系统就会报若干个触摸的信息封装到UIEvent对象中发送给程序,由管理程序UIApplication对象将事件分发。一般来说,事件将被发给主窗口,然后传给第一响应者对象(FirstResponder)处理。

//触摸状态
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, // 间接触摸(不是屏幕)
UITouchTypePencil API_AVAILABLE(ios(9.1)), // Add pencil name variant(添加铅笔名称变体)
UITouchTypeStylus API_AVAILABLE(ios(9.1)) = UITouchTypePencil, // A touch from a stylus (deprecated name, use pencil)(触控笔的触摸(不赞成使用的名称,使用铅笔))
} API_AVAILABLE(ios(9.0));

//触摸特性
typedef NS_OPTIONS(NSInteger, UITouchProperties) {
UITouchPropertyForce = (1UL << 0), //力度
UITouchPropertyAzimuth = (1UL << 1), //方位角
UITouchPropertyAltitude = (1UL << 2), // 高度
UITouchPropertyLocation = (1UL << 3), // For predicted Touches-对于预期的触摸(位置)
} API_AVAILABLE(ios(9.1)); 这个枚举在iOS9.1中引入

@interface UITouch : NSObject

//时间戳记录了触摸事件产生或变化时的时间。单位是秒。
@property(nonatomic,readonly) NSTimeInterval timestamp;

//触摸事件在屏幕上有一个周期,即触摸开始、触摸点移动、触摸结束,还有中途取消。通过phase可以查看当前触摸事件在一个周期中所处的状态。
@property(nonatomic,readonly) UITouchPhase phase;

//轻击(Tap)操作和鼠标的单击操作类似,tapCount表示短时间内轻击屏幕的次数。因此可以根据tapCount判断单击、双击或更多的轻击。
@property(nonatomic,readonly) NSUInteger tapCount; // touch down within a certain point within a certain amount of time

//触摸的类型
@property(nonatomic,readonly) UITouchType type API_AVAILABLE(ios(9.0));

// majorRadius and majorRadiusTolerance are in points--(
majorRadius和majorRadiusTolerance以磅为单位)
// The majorRadius will be accurate +/- the majorRadiusTolerance--(
majorRadius将是精确的+/- majorRadiusTolerance)

//Radius--半径 major--重大的
//触摸的半径
@property(nonatomic,readonly) CGFloat majorRadius API_AVAILABLE(ios(8.0));

//触摸半径的容差(点)。
@property(nonatomic,readonly) CGFloat majorRadiusTolerance API_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 API_AVAILABLE(ios(3.2));

//现在触摸的坐标//函数返回一个CGPoint类型的值,表示触摸在view这个视图上的位置,这里返回的位置是针对view的坐标系的。调用时传入的view参数为空的话,返回的时触摸点在整个窗口的位置。

//上一次触摸的坐标//该方法记录了前一个坐标值,函数返回也是一个CGPoint类型的值,表示触摸在view这个视图上的位置,这里返回的位置是针对view的坐标系的。调用时传入的view参数为空的话,返回的时触摸点在整个窗口的位置。

// Use these methods to gain additional precision that may be available from touches.
// Do not use precise locations for hit testing. A touch may hit test inside a view, yet have a precise location that lies just outside.
////现在触摸的精确的坐标

////上一次触摸的精确的坐标

// Force of the touch, where 1.0 represents the force of an average touch(
触摸力,其中1.0表示平均触摸力)--//触摸的力度
@property(nonatomic,readonly) CGFloat force API_AVAILABLE(ios(9.0));
// Maximum possible force with this input mechanism(通过这种输入机制可以产生最大的作用力) -- //触摸的最大的力度
@property(nonatomic,readonly) CGFloat maximumPossibleForce API_AVAILABLE(ios(9.0));

// Azimuth angle(方位角). Valid only for stylus touch types. Zero radians points along the positive X axis.(方位角。仅对手写笔触摸类型有效。零弧度沿正X轴指向。)
// Passing a nil for the view parameter will return the azimuth relative to the touch's window.(//沿着x轴正向的方位角,当与x轴正向方向相同时,该值为0;当view参数为nil时,默认为keyWindow返回触针的方位角(弧度)。)

// A unit vector that points in the direction of the azimuth angle. Valid only for stylus touch types.(指向方位角方向的单位向量。仅对手写笔触摸类型有效。)
// Passing nil for the view parameter will return a unit vector relative to the touch's window.(为view参数传递nil将返回相对于触摸窗口的单位向量)

// Altitude angle(海拔角度). Valid only for stylus touch types.(高度角。仅对手写笔触摸类型有效。)
// Zero radians indicates that the stylus is parallel to the screen surface,(
弧度为零表示触控笔与屏幕表面平行,--//当笔平行于平面时,该值为0)
// while M_PI/2 radians indicates that it is normal to the screen surface.(M_PI / 2弧度表示它垂直于屏幕表面。//当笔垂直于平面时,该值为Pi / 2)
@property(nonatomic,readonly) CGFloat altitudeAngle API_AVAILABLE(ios(9.1));//触针的高度(单位为弧度)。

// An index which allows you to correlate updates with the original touch.(一个索引,使您可以将更新与原始样式相关联。)
// Is only guaranteed non-nil if this UITouch expects or is an update.(仅当此UITouch预期或为更新时,才保证非null。)
//当每个触摸对象的触摸特性发生变化时,该值将会单独增加,返回值是NSNumber 索引号,让您关联与原来的触摸更新的联系
@property(nonatomic,readonly) NSNumber * _Nullable estimationUpdateIndex API_AVAILABLE(ios(9.1));

// A set of properties that has estimated values(一组具有估计值的属性)
// Only denoting properties that are currently estimated(仅表示当前估计的属性)
//当前触摸对象估计的触摸特性,返回值是UITouchPropertyies一组触摸属性,这些属性将得到更新。
@property(nonatomic,readonly) UITouchProperties estimatedProperties API_AVAILABLE(ios(9.1));

//一组期望在未来的更新报文的触摸性能。
@property(nonatomic,readonly) UITouchPropertiesestimatedPropertiesExpectingUpdates NS_AVAILABLE_IOS(9_1);

相关补充:
UIWindow:@interface UIWindow : UIView --> @interface UIView : UIResponder --> @interface UIResponder : NSObject

UIApplication:@interface UIApplication : UIResponder -- > @interface UIResponder : NSObject

UIViewController:@interface UIViewController : UIResponder -->@interface UIResponder : NSObject

UIButton:@interface UIButton : UIControl --> @interface UIControl : UIView --> @interface UIView : UIResponder -->@interface UIResponder : NSObject

UIImageView:@interface UIImageView : UIView --> @interface UIView : UIResponder -->@interface UIResponder : NSObject

UILabel:@interface UILabel : UIView -- > @interface UIView : UIResponder --> @interface UIResponder : NSObject

UITextView:@interface UITextView : UIScrollView -->@interface UIScrollView : UIView --> @interface UIView : UIResponder -- >@interface UIResponder : NSObject

UITextField:@interface UITextField : UIControl -->@interface UIControl : UIView -->@interface UIView : UIResponder --> @interface UIResponder : NSObject

UICollectionView:@interface UICollectionView : UIScrollView
UITableView:@interface UITableView : UIScrollView

@interface UITableViewCell : UIView
UICollectionViewCell:@interface UICollectionViewCell : UICollectionReusableView -->@interface UICollectionReusableView : UIView(reusable --可重用)

@interface UIEvent : NSObject
@interface UITouch : NSObject

上一篇下一篇

猜你喜欢

热点阅读