美文网首页
UITouch相关属性以及方法解释

UITouch相关属性以及方法解释

作者: 恋空K | 来源:发表于2020-04-26 16:59 被阅读0次

    //当用户用一根手指触摸屏幕时,会创建一个与手指相关联的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

    相关文章

      网友评论

          本文标题:UITouch相关属性以及方法解释

          本文链接:https://www.haomeiwen.com/subject/dufjwhtx.html