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.一般来说,这些控件的图形以及触摸区域都是矩形或者圆角矩形的.但是在一些特殊应用场景中我们有时不 ...
随机推荐
- WebView入门
webview是Android展示网页信息的控件,本文就来简要讲解这个控件的用法.关于webview我找到了一些很不错的文章,我就直接贴上连接,自己就不重复造轮子了.本文仅写出我本人目前使用过的东西, ...
- 分享到微信、微博、QQ空间、QQ微博
一:分享到微信 //分享到微信$("#weixin").bind("click", function () { var p = { url: ...
- cat、tac、rev、nl命令
当日志文件log.log很长,但又要按内容从后往前查看时,可以使用如下命令: tac log.log | more cat 由第一行开始显示内容,并将所有内容输出 tac 从最后 ...
- Apache Ant 简介和配置
Apache Ant 简介 Apache Ant是目前事实上的Java应用的标准build脚本工具.使它大受欢迎的一个主要愿意是它的和灵活,允许程序员创建自己的Task来对Ant进行扩展. ...
- C#和java之间的一些差异与共性
C#与java之间的一些共性和差异整理 隐藏:与java中的重写几乎一致,但是需要添加new关键字让编译器知道,否则会有警告 虚方法:1.声明为virtual的方法就是虚方法,在子类中使用overri ...
- android R.layout 中找不到已存在的布局文件
在R.layout.test文件时,总是找不到您想要的文件,可是它明明就在layout文件下面,而且在R.Java中也已经生成了,那么找不到的原因就是你导入了Android.R的包,这样你永远找不到你 ...
- 【BLE】CC2541之发现服务与特征值
一.简介 本文以SimpleBLECentral工程为例,解析CC2541作为主机时是如何发现从机的服务和特征值的. 二.实验平台 协议栈版本:BLE-CC254x-1.4.0 编译软件:IAR 8. ...
- Round() 四舍五入 js银行家算法
首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825; ...
- 集合 enum 枚举 简介 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- RV ItemDecoration 分割线 简介 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...