touchesBegan 触摸事件
一、概念介绍
1、在用户使用App过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型:
1)触摸事件
2)加速计事件
3)远程操控事件
- 响应者对象UIResponder
在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象”。
UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能接收并处理事件。
二、UIReponder类
UIResponder内部提供了一下方法来处理事件,父类是NSObject
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.远程控制事件(一般用于遥控)
1)开始按压的时候的调用
- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event
2)按压改变的时候调用
- (void)pressesEnded:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event
3)按压结束的时候调用
- (void)pressesCancelled:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event
4)当系统发出取消按压事件的时候调用
- (void)pressesCancelled:(NSSet<UIPress *> *)presses withEvent:(nullable UIPressesEvent *)event
三、UITouch类
UITouch父类是NSObject,存放在NSSet中,无序且不能重复,通过anyObject来访问单个元素。,通过forin循环来遍历NSSet中的每一个元素,当用户用一根手指触摸屏幕时,会创建一个与手指相关联的UITouch对象, 保存着跟本次手指触摸相关的信息,比如触摸的位置、时间、阶段, 当手指离开屏幕时,系统会销毁相应的UITouch对象。
1、属性:
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;
8)获取触摸手势
@property(nullable,nonatomic,readonly,copy) NSArray <UIGestureRecognizer *> *gestureRecognizers;
9)获取触摸压力值,一般压力值为1.0
@property(nonatomic,readonly) CGFloat force;
10)获取最大触摸压力值
@property(nonatomic,readonly) CGFloat maximumPossibleForce;
2、方法
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;
四、UIEvent类
UIEvent:成为事件对象,记录产生的时刻和类型,事件对象中包含于当前多点触摸序列相对应的所有触摸对象,还可以提供与特定视图或窗口相关联的触摸对象。
1、属性
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;
2、方法
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;
五、实例
1、获取触摸点的坐标
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{[super touchesBegan:touches withEvent:event];//获取触摸点的集合NSSet * allTouches = [event allTouches];//获取触摸对象UITouch * touch = [allTouches anyObject];//返回触摸点所在视图中的坐标CGPoint point = [touch locationInView:[touch view]];NSLog(@"point--x:%f y:%f",point.x,point.y);}
touchesBegan 触摸事件相关推荐
- ios事件-触摸事件2(手势 和 pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()的关系)
ios事件-触摸事件2(手势 和 pointInSide().hitTest().touchesBegan().touchesMoved().touchesEnded().touchesCancell ...
- ios事件-触摸事件3(UIButton 和 pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()的关系)
ios事件-触摸事件3(UIButton 和 pointInSide().hitTest().touchesBegan().touchesMoved().touchesEnded().touchesC ...
- 触摸事件练习 -- 手势解锁
Main.storyboard <?xml version="1.0" encoding="UTF-8" standalone="no" ...
- 【一个iOS官方文档错误】关于keyWindow是否可以接受触摸事件?
[一个iOS文档错误]关于keyWindow是否可以接受触摸事件? 关于keyWindow,官方文档有一个解释: 同一时间只有一个window可以成为keyWindow,keyWindow可以接受键盘 ...
- 浅析iOS中的触摸事件
一.什么是响应者对象? 在 iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象".UIApplication.UIV ...
- UI进阶--Quartz2D和触摸事件的简单使用:简易涂鸦板
需求:实现一个简易的涂鸦板应用,使用鼠标在涂鸦板内拖动即可进行涂鸦,点击保存按钮,可以把完成的涂鸦保存,点击回退按钮可以向后退回一步,点击清空可以让涂鸦板清空. 实现步骤: 1.布局storyboar ...
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
-- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...
- 移动开发:iphone开发之触摸事件详解
转:http://blog.sina.com.cn/s/blog_8988732e01012eaf.html iPhoneOS中的触摸事件基于多点触摸模型.用户不是通过鼠标和键盘,而是通过触摸设备的屏 ...
- iOS开发触摸事件的传递
1. iOS中的三种事件类型 触摸事件.加速计事件.远程事件. 触摸事件:通过触摸.手势进行触发(例如手指点击.缩放) 加速计事件:通过加速器进行触发(例如手机晃动,典型应用是微信摇一摇) 远程事件: ...
最新文章
- 用于药物反应预测的自适应大小的子结构学习
- 揭秘更加开放的数据库服务:阿里云数据库专属集群
- 牛客网_PAT乙级1004_福尔摩斯的约会 (20)
- 前端学习(3028):vue+element今日头条管理-使用icon图标的处理
- FreeBSD系统忘记root密码
- JQuery版评分控件
- 点击EditText可编辑,点击其他地方不可编辑
- 匈牙利算法解决指派问题(java版)
- LaTex写实验报告
- ubuntu最简单的联网(连接网络)方法
- Linux中rm -rf 文件夹,删不掉
- iOS新知识学习之React Native开发工具集
- 程序员如何优雅的赚零花钱?分享几个接私活的平台利器
- [Python]调用百度API进行自然语言处理 标签、关键字 以及 词法分析
- 从平凡到不平凡(转)
- Linux CPU频率控制
- 电大计算机基础光盘电脑安装,电大《计算机应用技术基础》第一章 计算机的硬件安装...
- Effective_STL 学习笔记(三十一) 了解你的排序选择
- 审查指南关于计算机可读介质,中美专利申请中对“计算机可读介质”的可专利性差异...
- CentOS7 安装 RabbitMQ 3.6(方法适用于安装任意版本 RabbitMQ)
热门文章
- iOS:苹果企业证书通过网页分发安装app
- 《圣女之歌2:撒雷母天使》超强全攻略2
- 北京第一年-OpenGL-3第一个任务-animation动画
- Lighthouse组合Puppeteer检测页面
- 「B站焊武帝」再出圈!孤身爆肝造CPU,软硬件全自研,可玩游戏,基础器件成本不到1000元...
- 头文件和源文件的拼接
- 找工作的小技巧(雕虫小技),刚参加工作的小伙伴可以看看
- MVC中使用PartialView方法
- 关于 Oracle ACFS 相关知识的简单学习
- 使用uwolfer gerrit-rest-java-client获取Gerrit信息