touchesBegan 触摸事件

一、概念介绍

  • 在用户使用app过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型:


    事件类型.png
  • 响应者对象UIResponder
    在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象”
    UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件

  • 一次完整的触摸过程中,只会产生一个事件对象,4个触摸方法都是同一个event参数
    如果两根手指同时触摸一个view,那么view只会调用一次touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象
    如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时的touches参数中只包含一个UITouch对象


二、方法介绍

UIResponder内部提供了以下方法来处理事件

1. 触摸事件

(1)手指按下事件

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;

(2)手指移动事件

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;

(3)手指抬起事件

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;

(4)意外中断事件(如电话打扰)

- (void)touchesCancelled:(nullable NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;

(5)3D触摸事件

- (void)touchesEstimatedPropertiesUpdated:(NSSet * _Nonnull)touches

2. 加速计事件

(1)开始加速

- (void)motionBegan:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event;

(2)结束加速

- (void)motionEnded:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event;

(3)加速中断

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event;

3. 远程控制事件

- (void)remoteControlReceivedWithEvent:(nullable UIEvent *)event;

三、参数介绍:touches

存放在NSSet中,无序且不能重复,通过anyObject来访问单个元素。,通过forin循环来遍历NSSet中的每一个元素
当用户用一根手指触摸屏幕时,会创建一个与手指相关联的UITouch对象, 保存着跟本次手指触摸相关的信息,比如触摸的位置、时间、阶段, 当手指离开屏幕时,系统会销毁相应的UITouch对象

属性:

(1)获取触摸产生时所处的窗口

@property(nonatomic,readonly,retain) UIWindow  *window;

(2)获取触摸产生时所处的视图

@property(nonatomic,readonly,retain) UIView  *view;

(3)获取短时间内点按屏幕的次数,可以根据tapCount判断单击、双击或更多的点击

@property(nonatomic,readonly) NSUInteger tapCount;

(4)获取触摸事件产生或变化时的时间,单位是秒

@property(nonatomic,readonly) NSTimeInterval timestamp;

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

@property(nonatomic,readonly) UITouchPhase  phase;

UITouchPhase 枚举:
UITouchPhaseBegan 开始触摸
UITouchPhaseMoved 移动
UITouchPhaseStationary 停留
UITouchPhaseEnded 触摸结束
UITouchPhaseCancelled 触摸中断

(6)触摸类型

@property(nonatomic,readonly) UITouchType type;

UITouchType 枚举:
UITouchTypeDirect 垂直的触摸类型
UITouchTypeIndirect 非垂直的触摸类型
UITouchTypeStylus 水平的触摸类型

(7)获取手指与屏幕的接触半径

@property(nonatomic,readonly) CGFloat majorRadius;

获取手指与屏幕的接触半径的误差

@property(nonatomic,readonly) CGFloat majorRadiusTolerance;

(8)获取触摸手势

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

(9)获取触摸压力值,一般的压力感应值为1.0

@property(nonatomic,readonly) CGFloat force;

(10)获取最大触摸压力值

@property(nonatomic,readonly) CGFloat maximumPossibleForce;

方法:

(1)返回当前触摸点在view上的位置
这里返回的位置是针对view的坐标系的(以view的左上角为原点(0, 0)),调用时传入的view参数为nil的话,返回的是触摸点在UIWindow的位置

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

(2)返回前一个触摸点的位置

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

(3)当前触摸对象的坐标

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

(4)当前触摸对象的前置坐标

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

四、参数介绍:event

UIEvent:称为事件对象,记录事件产生的时刻和类型,事件对象中包含与当前多点触摸序列相对应的所有触摸对象,还可以提供与特定视图或窗口相关联的触摸对象。

属性:

(1)获取事件类型

@property(nonatomic,readonly) UIEventType type;

UIEventType枚举:
UIEventTypeTouches 触摸事件
UIEventTypeMotion 加速事件
UIEventTypeRemoteControl 远程控制事件
UIEventTypePresses 按压事件

(2)获取远程控制事件

@property(nonatomic,readonly) UIEventSubtype  subtype;

UIEventSubtype 枚举:

// 不包含任何子事件类型
UIEventSubtypeNone                              = 0,
// 摇晃事件(从iOS3.0开始支持此事件)
UIEventSubtypeMotionShake                       = 1,
//远程控制子事件类型(从iOS4.0开始支持远程控制事件)
//播放事件【操作:停止状态下,按耳机线控中间按钮一下】
UIEventSubtypeRemoteControlPlay                 = 100,
//暂停事件
UIEventSubtypeRemoteControlPause                = 101,
//停止事件
UIEventSubtypeRemoteControlStop                 = 102,
//播放或暂停切换【操作:播放或暂停状态下,按耳机线控中间按钮一下】
UIEventSubtypeRemoteControlTogglePlayPause      = 103,
//下一曲【操作:按耳机线控中间按钮两下】
UIEventSubtypeRemoteControlNextTrack            = 104,
//上一曲【操作:按耳机线控中间按钮三下】
UIEventSubtypeRemoteControlPreviousTrack        = 105,
//快退开始【操作:按耳机线控中间按钮三下不要松开】
UIEventSubtypeRemoteControlBeginSeekingBackward = 106,
//快退停止【操作:按耳机线控中间按钮三下到了快退的位置松开】
UIEventSubtypeRemoteControlEndSeekingBackward   = 107,
//快进开始【操作:按耳机线控中间按钮两下不要松开】
UIEventSubtypeRemoteControlBeginSeekingForward  = 108,
//快进停止【操作:按耳机线控中间按钮两下到了快进的位置松开】
UIEventSubtypeRemoteControlEndSeekingForward    = 109,
(3)获取触摸产生或变化的时间戳
@property(nonatomic,readonly) NSTimeInterval  timestamp;

方法:

(1)获取触摸点的集合,可以判断多点触摸事件

- (nullable NSSet <UITouch *> *)allTouches;

(2)获取指定窗口里的触摸点

- (nullable NSSet <UITouch *> *)touchesForWindow:(UIWindow *)window;

(3)获取指定视图里的触摸点

- (nullable NSSet <UITouch *> *)touchesForView:(UIView *)view;

(4)获取手势对象

- (nullable NSSet <UITouch *> *)touchesForGestureRecognizer:(UIGestureRecognizer *)gesture;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容