touchesBegan 触摸事件

touchesBegan 触摸事件一、概念介绍1、在用户使用App过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型:1)触摸事件2)加速计事件3)远程操控事件响应者对象UIResponder        在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象”。      UIApplication、UIViewController、UIView都继承…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、概念介绍

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);
    
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/164156.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 关系数据库理论之最小函数依赖集「建议收藏」

    关系数据库理论之最小函数依赖集「建议收藏」前言在本文中,会介绍为什么要引入最小函数依赖集,最小函数依赖集是什么,以及如何求最小函数依赖集。为什么需要最小函数依赖集在关系数据模型中,一个关系通常由R(U,F)构成,U为属性的全集,F为函数依赖集。在实际生活中,我们可以根据语义来定义关系中属性的依赖关系,例如学号可以唯一确定一位学生的姓名、性别等等。但是,有时候给出的函数依赖集并不是最简的,这有时会拖累我们对关系的后续处理,例如关系的分…

  • hdu 3652 B-number(数字dp)

    hdu 3652 B-number(数字dp)

  • Java语言实现自动关机程序

    Java语言实现自动关机程序@Java实现自动关机系统Java语言实现自动关机程序该项目实现了以下任务:1、提示用户,欢迎使用某某关机程序2、提示用户,输入倒计时关机的秒数3、根据用户输入的秒数,进行自动关机4、开始自动关机时,提示用户xxx秒后关机项目具体代码我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown将代码片显示选择的

  • Activiti7的El表达式的坑 com.fasterxml.jackson.databind.node.IntNode to class java.lang.Long (incompatible

    Activiti7的El表达式的坑 com.fasterxml.jackson.databind.node.IntNode to class java.lang.Long (incompatible///网关标准金额Assigneevariables.put(Assignee_standardMoney,”1000″);<sequenceFlowid=”_12″sourceRef=”_5″targetRef=”_6″><conditionExpressionxsi:type=”tFormalExpression”><![CDATA[${amountOfMoney<‘1000’}]]></condition.

  • 树莓派是什么?能干什么?

    树莓派是什么?能干什么?树莓派是什么?能干什么?一、什么是树莓派?二、树莓派和单片机的区别?三、树莓派使用的什么系统?四、树莓派的最基本操作方法?五、树莓派能干什么?六、玩树莓派能学到什么?一、什么是树莓派?树莓派是由树莓派基金会发布的卡片式电脑,起初的目的是为了让更多的孩子们可以学习计算机编程,但是发布以后受到了广大计算机爱好者的喜爱树莓派被称为卡片式电脑,顾名思义它可以安装操作系统,并且接上显示屏鼠标键盘就可以正常使用,在上面可以用python或者C语言编程并运行。二、树莓派和单片机的区别?树莓派是卡片式电脑可以装

  • java 大整数取余_java 整数取余

    java 大整数取余_java 整数取余java整数取余是建立在java整数除法的基础上的,java整数除法可以参考我的上一篇文章java整数除法。Theremainderoperationforoperandsthatareintegersafterbinarynumericpromotion(§5.6.2)producesaresultvaluesuchthat(a/b)*b+(a%b)is…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号