IOS (补充)触摸事件处理
[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 (补充)触摸事件处理的更多相关文章
- iOS触摸事件处理
iOS触摸事件处理 主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景. 一.处理机制 界面响应消息机制分两块, (1)首先在视图的层次结构里找到能响应消息的那个视图. (2 ...
- iOS触摸事件处理--备用
主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景. 一.处理机制 界面响应消息机制分两块,(1)首先在视图的层次结构里找到能响应消息的那个视图.(2)然后在找到的视图里处理消息 ...
- iOS之触摸及手势
触摸事件 iOS中的事件: 在用户使用app过程中,会产生各种各样的事件.iOS中的事件可以分为3大类型: view的触摸事件处理: 响应者对象: 在iOS中不是任何对象都能处理事件,只有继承了 ...
- iOS中—触摸事件详解及使用
iOS中--触摸事件详解及使用 (一)初识 要想学好触摸事件,这第一部分的基础理论是必须要学会的,希望大家可以耐心看完. 1.基本概念: 触摸事件 是iOS事件中的一种事件类型,在iOS中按照事件划分 ...
- iOS的触摸事件
在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称其为@''响应者对象''UIApplication,UIViewController,UIView都 ...
- iOS基础 - 触摸事件与手势识别
一.iOS的输入事件 UIKit可识别三种类型的输入事件: 触摸事件 运动(加速计)事件 远程控制事件 二.UIEvent iOS中许多事件对象都是UIEvent类的实例,记录事件产生的时刻和类型 U ...
- iOS中的事件处理
前言:iOS中事件处理,是一个非常重要也非常难得地方.涉及到响应者链的地方的面试题,非常多工作两三年的老鸟也未必能回答的非常专业.这里具体介绍一下iOS中的事件处理,以及响应者链. 1. 三大事件 触 ...
- cocos2d触摸事件处理机制(2.x和3.x变化)
2.x的触摸事件的版本号 触摸事件处理有2种子.以下单点触摸的样本.(另一种多点触摸屏). 创建cocos2d 该项目. 1. 重写下面虚函数. bool ccTouchBegan(cocos2d:: ...
- 【原】ios的hitTest方法以及不规则区域内触摸事件处理方法
概述 在正常的使用场景中,我们处理了比较多的矩形区域内触摸事件,比如UIButton.UIControl.一般来说,这些控件的图形以及触摸区域都是矩形或者圆角矩形的.但是在一些特殊应用场景中我们有时不 ...
随机推荐
- centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息
1.系统 1.1版本 uname -a 能确认是64位还是32位,其它的信息不多 [root@localhost ~]# uname -a Linux localhost.localdomain 3. ...
- Android性能优化工具之Systrace
本文大部分内容来自:http://www.androidperformance.com/android-performance-tools-systrace-1.html?utm_source=tui ...
- 《Android编程权威指南》
<Android编程权威指南> 基本信息 原书名:Android programming: the big nerd ranch guide 原出版社: Big Nerd Ranch Gu ...
- Greenplum入门——基础知识、安装、常用函数
Greenplum入门——基础知识.安装.常用函数 2017年10月08日 22:03:09 在咖啡里溺水的鱼 阅读数:8709 版权声明:本文为博主原创,允许非商业性质转载但请注明原作者和出处 ...
- 生成模型(Generative Model)和 判别模型(Discriminative Model)
引入 监督学习的任务就是学习一个模型(或者得到一个目标函数),应用这一模型,对给定的输入预测相应的输出.这一模型的一般形式为一个决策函数Y=f(X),或者条件概率分布P(Y|X). 监督学习方法又可以 ...
- django错误:Connection reset by peer
django使用自身的web服务器时,处理并发的能力很弱,如果客户端并发连接数超过了其承载量,服务器会将其中一些连接关闭,从而导致这个问题 https://blog.csdn.net/xc_zhou/ ...
- Dubbo的一些编码约定和设计原则
编码约定 代码风格 Dubbo 的源代码和 JavaDoc 遵循以下的规范: Code Conventions for the Java Programming Language How to Wri ...
- 【转】 Qt如何设置自动补全快捷键
原文:https://blog.csdn.net/u014597198/article/details/52797435 在用Qt编程的时,它默认是以“CTRL+空格”来作为自动补全的快捷键的,但是这 ...
- 全景分割panopticapi使用
文件解析 参考github:https://github.com/cocodataset/panopticapi 输入图像:
- 如何在Windows版的ScaleIO的节点中添加磁盘
嗯, 为什么会有这个问题呢? 因为我要安装ScaleIO 1.32, 在使用Installation manager完成初始安装之后, 需要将一些磁盘添加到ScaleIO的storage pool中. ...