iOS触摸事件应用举例

1. 触摸事件的类型

 触摸事件的类型一共有四个,一次完整的触摸,至少包括开始和结束两个事件

 1> 触摸开始,用手指(一根或者多根)按在屏幕上
 2> 触摸移动,手指在屏幕上发生移动(有可能会发生)
 3> 触摸结束,手指从屏幕上离开
 4> 触摸被取消,因为系统事件(例如电话呼叫)一次触摸事件被取消

#pragma mark ***触摸开始

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event


#pragma mark 触摸移动


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event


#pragma mark 触摸完成


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event


#pragma mark 触摸取消(来电)


- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event


#pragma mark - 常用方法


#pragma mark 获取触摸集合中任意一个触摸对象,对于单点触摸,直接用就可以


UITouch *touch = [touches anyObject];


#pragma mark 获取触摸在当前视图的位置


CGPoint location = [touch locationInView:self.view];


#pragma mark 获取触摸在当前视图的前一点位置


CGPoint preLocation = [touch previousLocationInView:self.view];


2. 触摸对象UITouch的属性及方法

 属性:
 1> view:       检测到触摸事件的视图,在开发中使用最为频繁的属性
 2> window:     窗口,发生触摸事件的窗口

 3> phase:      相位属性,开发中极少使用,一般用户自定义手势识别
 4> timestamp:  发生触摸的时间
    以上两个属性,通常用户开发自定义手势识别,日常开发中不需要使用。

 5> tapCount:   发生触摸时,在短时间内,手指点按的次数,通常用于判断单击还是双击
    提示:在iOS开发中,尽量少用双击事件!
    如果要使用双击,需要有图形化的界面提示用户,某一个控件上是允许双击操作的。

 方法:
 1> locationInView:             发生触摸事件相对视图的位置(坐标点)
 2> previousLocationInView:     发生触摸事件前一次手指所在的位置(坐标点)

 3. 对于单点触摸,经常使用

    UITouch *touch = [touches anyObject];

    从touches集合中获取到用户的触摸对象

    通常,在应用程序开发中,为了简化程序的复杂度,一般只是用单点触摸,
    而如果需要支持多点触摸,通常是使用手势识别来处理。

 4. hitTest方法,用于检测具体响应用户触摸点视图的方法

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    与
    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;
    在视图内部返回YES,否则返回NO

    联合使用来判断用户触摸点的位置是否在指定的视图内部,如果是,表示该视图可以接收用户交互。

    以上两个方法会被循环递归,多次调用!直至找到最适合响应用户请求的视图!

    提示:一般情况下,不要轻易重写这两个方法,因为一旦方法内部使用了消耗量大的代码,会严重影响系统的性能!
    窍门:一旦出现示例中需要拦截触摸事件的情况,可以与美工或者策划人员沟通,调整界面!

    1) 如果返回nil,表示没有响应的视图
    2) 如果返回视图,表示该视图接收用户的响应

    接收用户触摸响应的几个条件
    1) self.userInteractionEnabled = YES;   允许接收用户响应
    2) self.hidden = NO;                    只有现实的视图才能接收用户触摸
    3) self.alpha > 0.01;                   视图的透明度一定要可见

    提示:并不是所有的控件都默认接收用户交互的,譬如:UIImageView,UILabel等

    参数说明

    point   用户触摸的点,相对于当前视图坐标系的坐标点
    event   用户触摸事件,开发中一般程序员不使用,该事件用于在响应者链条上传递
时间: 2024-08-27 17:43:05

iOS触摸事件应用举例的相关文章

IOS 触摸事件分发机制详解

欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:MelonTeam 前言 很多时候大家都不关心IOS触摸事件的分发机制的实现原理,当遇到以下几种情形的时候你很可能抓破头皮都找不到解决方案: 某个点击消息由父视图来处理,子视图怎么把消息传递给父视图 这个按钮不灵敏,怎么扩大点击响应区域 怎么在一个页面处理手绘.表情拖动放缩.文本编辑三种消息 阅读本文,你会明白两个问题:IOS如何找到响应者.响应者是如何做出响应,明白这两个问题你就能解决类似上述的疑难杂症.通过控制Hit-test v

IOS触摸事件和手势识别

IOS触摸事件和手势识别 目录 概述 触摸事件 手势识别 概述 为了实现一些新的需求,我们常常需要给IOS添加触摸事件和手势识别 触摸事件 触摸事件的四种方法 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 开始触摸所触发的方法 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 移动时触发的方法 -(void)touchesEnded:(N

iOS触摸事件深度解析-备用

概述 本文主要解析从我们的手指触摸苹果设备到最终响应事件的整个处理机制.本质上讲,整个过程可以分为两个步骤: 步骤1:找目标.在iOS视图层次结构中找到触摸事件的最终接受者: 步骤2:事件响应.基于iOS响应者链(Responder Chain)处理触摸事件 找目标 在找目标阶段所使用到的两大利器是UIView的 hitTest:withEvent: 以及 pointInside:withEvent: 方法.找目标的过程也称为hit-Testing.先来看一张图(注: 图来自MJ)比较直观: 下

iOS触摸事件

步骤1:找目标.在iOS视图层次结构中找到触摸事件的最终接受者: 步骤2:事件响应.基于iOS响应者链(Responder Chain)处理触摸事件 找目标 在找目标阶段所使用到的两大利器是UIView的 hitTest:withEvent: 以及 pointInside:withEvent: 方法.找目标的过程也称为hit-Testing.先来看一张图(注: 图来自MJ)比较直观: 下面解释一下处理原理: 1.手指触摸屏幕,这个动作被包装成一个UIEvent对象发送给当前活跃的UIApplic

iOS触摸事件深入

转载自:http://www.cnblogs.com/wengzilin/p/4720550.html 概述 本文主要解析从我们的手指触摸苹果设备到最终响应事件的整个处理机制.本质上讲,整个过程可以分为两个步骤: 步骤1:找目标.在iOS视图层次结构中找到触摸事件的最终接受者: 步骤2:事件响应.基于iOS响应者链(Responder Chain)处理触摸事件 找目标 在找目标阶段所使用到的两大利器是UIView的 hitTest:withEvent: 以及 pointInside:withEv

【原】iOS触摸事件深度解析

概述 本文主要解析从我们的手指触摸苹果设备到最终响应事件的整个处理机制.本质上讲,整个过程可以分为两个步骤: 步骤1:找目标.在iOS视图层次结构中找到触摸事件的最终接受者: 步骤2:事件响应.基于iOS响应者链(Responder Chain)处理触摸事件 找目标 在找目标阶段所使用到的两大利器是UIView的 hitTest:withEvent: 以及 pointInside:withEvent: 方法.找目标的过程也称为hit-Testing.先来看一张图(注: 图来自MJ)比较直观: 下

IOS 触摸事件的处理

触摸事件的处理1.判断触摸点在谁身上: 调用所有UI控件的- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 2.pointInside返回YES的控件就是触摸点所在的UI控件 3.由触摸点所在的UI控件选出处理事件的UI控件: 调用- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

iOS 触摸事件与UIResponder(内容根据iOS编程编写)

触摸事件 因为 UIView 是 UIResponder 的子类,所以覆盖以下四个方法就可以处理四种不同的触摸事件: 1.  一根手指或多根手指触摸屏幕 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event; 2.  一根手指或多根手指在屏幕上移动(随着手指的移动,相关的对象会持续发送该消息) - (void)touchesMoved:(NSSet<UITouch *>

iOS触摸事件总结

一.关于事件传递一些基础知识 1.UIView类是UIResponder的一个子类,因此能够接收用户和视图内容交互 时产生的触摸事件.触摸事件从发生触摸的视图开始,沿着响应者链进行传 递,直到最后被处理. 视图本身就是响应者,是响应者链的参与者,因此可以 收到所有关联子视图派发给它们的触摸事件. 2.在缺省情况下,视图每次只响应一个触摸动作.如果用户将第二个手 指放在屏幕上,系统会忽略该触摸事件,而不会将它报告给视图对象.如果您 希望在视图的事件处理器方法中跟踪多点触摸手势,则需要重新激活多点触