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.一般来说,这些控件的图形以及触摸区域都是矩形或者圆角矩形的.但是在一些特殊应用场景中我们有时不 ...
随机推荐
- 黑帆第四季/全集Black Sails迅雷下载
本季看点:<黑帆>本剧是著名海盗故事<金银岛>(Treasure Island)的前传.Starz宣布<Black Sails>已提前获得第四季续订,第四季10集和 ...
- wdcp支持两种安装方式
v3.2版本已发布,支持多PHP版本共存共用,支持SSL证书,更多可看论坛 v3版讨论区 更多安装说明请看 http://www.wdlinux.cn/bbs/thread-57643-1-1.htm ...
- 用开源项目RoundedImageView来实现 圆形 / 圆角 / 椭圆的图片
该开源项目的地址:https://github.com/vinc3m1/RoundedImageView 我自己分流下载文件的:http://download.csdn.net/detail/shar ...
- ps -ef | grep 查看进程命令
通过 ps -ef | grep redis 查看当前Redis 的进程情况.
- [转]InnoDB和MyISAM区别
From : http://blog.csdn.net/ghosc/article/details/5391544 MySQL作为当前最为流行的免费数据库服务引擎,已经风靡了很长一段时间,不过也许也有 ...
- Ember.js 1.0 RC6 发布,JavaScript 框架
Ember.js 1.0 发布了第 6 个 RC 版本,下载地址:https://github.com/emberjs/ember.js/tree/v1.0.0-rc.6 该版本包含众多的改进记录,详 ...
- Asp.net MVC 如何防止CSRF攻击
什么是CSRF攻击? CSRF(Cross-site request forgery跨站请求伪造,也被称成为"one click attack"或者session riding,通 ...
- iOS开发文件夹--Copy items if needed
蓝色文件夹 蓝色文件夹(folder)一般作为资源文件夹使用,与黄色文件夹的主要区别是不参与编译,所以说如果你在这些文件夹下编写的逻辑代码是不参与编译的,其他文件也不能直接引用它们,若引用其中文件需要 ...
- 如何解决在Windows Server 2008 R2 上安装证书服务重启后出现 CertificationAuthority 91错误事件
很久都没写什么博客了,前一段时间学习2008 R2时,在自己的电脑上同时安装AD 和证书 往往会出现一个CertificationAuthority错误,如下: 产生问题的主要原因是: 证书服务器与D ...
- 提高sql2005中带freetexttable和rank的全文检索的速度
原来使用中的sql2005的全文检索的速度总是不如意,尤其是带rank的.今天搜了一下,原来在freetexttable中还有一个参数top_n_by_rank,是第4个参数.注意还要设置:EXEC ...