[1]事件的基本概念

UIEvent:事件,是由硬件捕捉的一个表示用户操作设备的对象。

分三类:触摸事件、晃动事件、远程控制事件

触摸事件:用户通过触摸设备屏幕操作对象、输入数据。支持多点触摸,包括1个到多个触摸点

UIView支持触摸事件(由于继承于UIResponder),并且支持多点触摸。

须要定义UIView子类,实现触摸相关的方法。

touches..began、

touches..moved、

touches...ended、

touches..canceled 

[2]手势:有规律的触摸。

UITouch代表触摸在屏幕上的一根手指。

能够获取触摸时间和触摸位置。

怎样获取touch对象。touches集合中包括了视图上的全部⼿势

什么是响应者链

响应者链就是多个响应者对象组成的链

事件的基本概念

UIEvent:事件,是由硬件捕捉的一个表示用户操作设备的对象。

分三类:触摸事件、晃动事件、远程控制事件

触摸事件:用户通过触摸设备屏幕操作对象、输入数据。

支持多点触摸,包括1个到多个触摸点

UIView支持触摸事件(由于继承于UIResponder),并且支持多点触摸。

须要定义UIView子类,实现触摸相关的方法。

touches..began、

touches..moved、

touches...ended、

touches..canceled 

手势:有规律的触摸。

UITouch代表触摸在屏幕上的一根手指。能够获取触摸时间和触摸位置。

怎样获取touch对象。

touches集合中包括了视图上的全部⼿势

[3]什么是响应者链

响应者链就是多个响应者对象组成的链

UIResponder。响应者类。

iOS中全部能响应事件(触摸、晃动、远程事件)的对象都是响应者。

系统定义了一个抽象的父类UIResponder来表示响应者。其子类都是响应者 

硬件检測到触摸操作,会将信息交给UIApplication,開始检測。

UIApplication -> window -> viewController -> view ->
检測全部⼦子视图

终于确认触摸位置,完毕响应者链的查询过程

检測到响应者后,实现touchesBegan:withEvent:等方法,即处理事件。

 假设响应者没有处理事件,事件会向下传递。

假设没有响应者处理,
则丢弃触摸事件。

事件处理的顺序与触摸检測查询相反。
触摸的⼦视图 -> view -> viewController -> window -> UIApplication 

响应者链能够被打断。⽆法完毕检測查询过程。

视图类的属性 : userInteractionEnabled。

关闭后能阻断查询过程。 

代码:

#import "TestView.h"
#import "RootView.h"
#define KRandomColor arc4random()%256/255.0
@interface TestView()
{
//開始触摸的点 CGPoint _start;
}
@end
@implementation TestView - (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{ self.backgroundColor = [UIColor redColor];
}
return self;
}
//開始触摸事件的时候,运行touch 里面的预定的运行事件代码(開始触摸的时候,到这看看)
//一次触摸事件发生时,该方法仅仅运行一次
-(void)touchesBegan:(NSSet *)touches
withEvent:(UIEvent *)event
{
//触摸的时候随机颜色(KRandomColor是在延展里定义的随机数)
self.backgroundColor = [UIColor colorWithRed:KRandomColor green:KRandomColor blue:KRandomColor alpha:1];
//第一次触摸时候的坐标
_start = [[touches anyObject] locationInView:self];
NSLog(@"点我改变颜色");
} //一次触摸事件尚未结束,会一直调用该方法
//没摸完,就一直摸
-(void)touchesMoved:(NSSet *)touches
withEvent:(UIEvent *)event
{
//移动的点
CGPoint nowPoint = [[touches anyObject] locationInView:self];
//移动的点减去開始触摸的点
CGFloat x = nowPoint.x - _start.x;
CGFloat y = nowPoint.y - _start.y;
CGPoint centerPoint = CGPointMake(self.center.x + x, self.center.y + y);
self.center = centerPoint;
//打印移动时候的坐标
NSLog(@"%@",NSStringFromCGPoint(nowPoint));
} //一次触摸时间结束,运行该方法
//触摸完毕 -(void)touchesEnded:(NSSet *)touches
withEvent:(UIEvent *)event
{ NSLog(@"结束了");
}
//触摸时间被别的打断,
//有人打搅
-(void)touchesCancelled:(NSSet *)touches
withEvent:(UIEvent *)event
{ } @end

IOS (补充)触摸事件处理的更多相关文章

  1. iOS触摸事件处理

    iOS触摸事件处理   主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景. 一.处理机制 界面响应消息机制分两块, (1)首先在视图的层次结构里找到能响应消息的那个视图. (2 ...

  2. iOS触摸事件处理--备用

    主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景. 一.处理机制 界面响应消息机制分两块,(1)首先在视图的层次结构里找到能响应消息的那个视图.(2)然后在找到的视图里处理消息 ...

  3. iOS之触摸及手势

    触摸事件 iOS中的事件: 在用户使用app过程中,会产生各种各样的事件.iOS中的事件可以分为3大类型:    view的触摸事件处理: 响应者对象: 在iOS中不是任何对象都能处理事件,只有继承了 ...

  4. iOS中—触摸事件详解及使用

    iOS中--触摸事件详解及使用 (一)初识 要想学好触摸事件,这第一部分的基础理论是必须要学会的,希望大家可以耐心看完. 1.基本概念: 触摸事件 是iOS事件中的一种事件类型,在iOS中按照事件划分 ...

  5. iOS的触摸事件

    在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称其为@''响应者对象''UIApplication,UIViewController,UIView都 ...

  6. iOS基础 - 触摸事件与手势识别

    一.iOS的输入事件 UIKit可识别三种类型的输入事件: 触摸事件 运动(加速计)事件 远程控制事件 二.UIEvent iOS中许多事件对象都是UIEvent类的实例,记录事件产生的时刻和类型 U ...

  7. iOS中的事件处理

    前言:iOS中事件处理,是一个非常重要也非常难得地方.涉及到响应者链的地方的面试题,非常多工作两三年的老鸟也未必能回答的非常专业.这里具体介绍一下iOS中的事件处理,以及响应者链. 1. 三大事件 触 ...

  8. cocos2d触摸事件处理机制(2.x和3.x变化)

    2.x的触摸事件的版本号 触摸事件处理有2种子.以下单点触摸的样本.(另一种多点触摸屏). 创建cocos2d 该项目. 1. 重写下面虚函数. bool ccTouchBegan(cocos2d:: ...

  9. 【原】ios的hitTest方法以及不规则区域内触摸事件处理方法

    概述 在正常的使用场景中,我们处理了比较多的矩形区域内触摸事件,比如UIButton.UIControl.一般来说,这些控件的图形以及触摸区域都是矩形或者圆角矩形的.但是在一些特殊应用场景中我们有时不 ...

随机推荐

  1. mybatis大于号,小于号,去地址符,单引号,双引号转义说明

    在mybatis中,使用到大于号,小于号,与在SQL编辑器中是不一样的. SELECT * FROM test WHERE 1 = 1 AND start_date <= CURRENT_DAT ...

  2. Smali基本语法

    .field private isFlag:z 定义变量 .method 方法 .parameter 方法参数 .prologue 方法开始 .line 12 此方法位于第12行 invoke-sup ...

  3. Android之对TabActivity的见解,个人觉得不错

    http://www.cnblogs.com/answer1991/archive/2012/05/08/2489844.html answer1991 无法停止我内心的狂热,对未来的执着. Andr ...

  4. golang常用模块介绍

    golang模块 一.命令行库Cobra Cobra提供简单的接口来创建强大的现代化CLI接口,比如git与go工具.Cobra同时也是一个程序, 用于创建CLI程序 https://www.jian ...

  5. Java 文件路径相关

    不得不说Java的文件路径弄得很复杂, 有编译目录和resource目录什么的和解释型语言(PHP)的就是不一样 搞了好几年java一直没认真去研究这些个破路径怎么回事, 每次都忘记, 梳理一下备忘 ...

  6. RV32C指令集

    Risc-V支持16位压缩格式,压缩格式立即数位数更少,能使用的寄存器也比较少,有些指令只能用常用8个整数寄存器(x8-x15)或者(f8-f15). 每个RVC指令都有对应的32位指令,下表列出所有 ...

  7. 第二章 BIO与NIO

    <netty权威指南>读书笔记 一.BIO 1.服务端程序: package bio; import java.io.BufferedReader; import java.io.IOEx ...

  8. Java系列:JVM中的OopMap(zz)

    调用栈里的引用类型数据是GC的根集合(root set)的重要组成部分:找出栈上的引用是GC的根枚举(root enumeration)中不可或缺的一环. JVM选择用什么方式会影响到GC的实现: 如 ...

  9. iOS开发-Block回调

    关于Block之前有一篇文章已经写过一篇文章Object-C-代码块Block回顾,不过写的比较浅显,不能体现出Block在实际开发中的重要性,关于Block的基础知识,可以参考之前的博客.在实际开发 ...

  10. 微信公众平台开发----自定义菜单、消息处理及获取OpenID(C#)

    一.成为开发者 服务器配置 登录微信公众平台官网后,在公众平台后台管理页面 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL).Token和EncodingAESKey,如下图所示: 其中 ...