//当用户用一根手指触摸屏幕时,会创建一个与手指相关联的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)locationInView:(nullable UIView *)view;
//上一次触摸的坐标//该方法记录了前一个坐标值,函数返回也是一个CGPoint类型的值,表示触摸在view这个视图上的位置,这里返回的位置是针对view的坐标系的。调用时传入的view参数为空的话,返回的时触摸点在整个窗口的位置。
- (CGPoint)previousLocationInView:(nullable UIView *)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.
////现在触摸的精确的坐标
- (CGPoint)preciseLocationInView:(nullable UIView *)view API_AVAILABLE(ios(9.1));
////上一次触摸的精确的坐标
- (CGPoint)precisePreviousLocationInView:(nullable UIView *)view API_AVAILABLE(ios(9.1));
// 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返回触针的方位角(弧度)。)
- (CGFloat)azimuthAngleInView:(nullable UIView *)view API_AVAILABLE(ios(9.1));
// 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将返回相对于触摸窗口的单位向量)
- (CGVector)azimuthUnitVectorInView:(nullable UIView *)view API_AVAILABLE(ios(9.1));
// 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
网友评论