[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:等方法,即处理事件。

  1. 假设响应者没有处理事件,事件会向下传递。
  2.  
  3. 假设没有响应者处理,
  4. 则丢弃触摸事件。

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

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

视图类的属性 : userInteractionEnabled。

关闭后能阻断查询过程。 

代码:

  1. #import "TestView.h"
  2. #import "RootView.h"
  3. #define KRandomColor arc4random()%256/255.0
  4. @interface TestView()
  5. {
  6. //開始触摸的点
  7.  
  8. CGPoint _start;
  9. }
  10. @end
  11. @implementation TestView
  12.  
  13. - (id)initWithFrame:(CGRect)frame
  14. {
  15. self = [super initWithFrame:frame];
  16. if (self)
  17. {
  18.  
  19. self.backgroundColor = [UIColor redColor];
  20. }
  21. return self;
  22. }
  23. //開始触摸事件的时候,运行touch 里面的预定的运行事件代码(開始触摸的时候,到这看看)
  24. //一次触摸事件发生时,该方法仅仅运行一次
  25. -(void)touchesBegan:(NSSet *)touches
  26. withEvent:(UIEvent *)event
  27. {
  28. //触摸的时候随机颜色(KRandomColor是在延展里定义的随机数)
  29. self.backgroundColor = [UIColor colorWithRed:KRandomColor green:KRandomColor blue:KRandomColor alpha:1];
  30. //第一次触摸时候的坐标
  31. _start = [[touches anyObject] locationInView:self];
  32. NSLog(@"点我改变颜色");
  33. }
  34.  
  35. //一次触摸事件尚未结束,会一直调用该方法
  36. //没摸完,就一直摸
  37. -(void)touchesMoved:(NSSet *)touches
  38. withEvent:(UIEvent *)event
  39. {
  40. //移动的点
  41. CGPoint nowPoint = [[touches anyObject] locationInView:self];
  42. //移动的点减去開始触摸的点
  43. CGFloat x = nowPoint.x - _start.x;
  44. CGFloat y = nowPoint.y - _start.y;
  45. CGPoint centerPoint = CGPointMake(self.center.x + x, self.center.y + y);
  46. self.center = centerPoint;
  47. //打印移动时候的坐标
  48. NSLog(@"%@",NSStringFromCGPoint(nowPoint));
  49. }
  50.  
  51. //一次触摸时间结束,运行该方法
  52. //触摸完毕
  53.  
  54. -(void)touchesEnded:(NSSet *)touches
  55. withEvent:(UIEvent *)event
  56. {
  57.  
  58. NSLog(@"结束了");
  59. }
  60. //触摸时间被别的打断,
  61. //有人打搅
  62. -(void)touchesCancelled:(NSSet *)touches
  63. withEvent:(UIEvent *)event
  64. {
  65.  
  66. }
  67.  
  68. @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. Js与正则表达式

    原本接着上面的章节,这一章节应该是写 Jquery事件的,由工作需要,暂时横插一篇正则表达式的学习,这里是边学边记录,错误之处,希望指正,提拔一二,不甚感激! 此章节有 1.1 正则表达式的定义 1. ...

  2. 通过Spannable对象设置textview的样式

    通过Spannable对象我们可以设置textview的各种样式,其功能十分强大.通过SpannableString和它的setSpan(Object what, int start, int end ...

  3. [Web 前端] ECMAScript5之StrictMode

    cp from : https://www.cnblogs.com/giggle/p/5252185.html ECMAScript5引入一个严格模式的概念(Strict Mode). 它的作用就是不 ...

  4. 最课程启示录:L风的李同学

    李同学是一个特殊的存在. 他永远是学员群里话最多的一个男同学.注意,这里加了一个定语“男”,这当然意味着不久的将来,我们的学员启示录将会出现一个话多的女同学. 我并不是第一天知道他话多.据说,他在来最 ...

  5. Lp空间

    在数学中,Lp空间是由p次可积函数组成的空间:对应的ℓp空间是由p次可和序列组成的空间.它们有时叫做勒贝格空间,以昂利·勒贝格命名(Dunford & Schwartz 1958,III.3) ...

  6. C/C++ 关于 for循环 的第二个表达式右侧非常量的时候

    废话不多说,直接看代码: #include<stdio.h> int main(){ ; ;z<zmax;z++){ printf("i=%d z=%d\n",i ...

  7. 聊一聊Spring中的线程安全性

    Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”.但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码. Spring对每个bean提 ...

  8. Remote Desktop Session中如何触发Ctrl+Alt+Delete?

    Ctrl+Alt+End is a keyboard shortcut used in a Remote Desktop Session to display the security dialog ...

  9. Arduino教程:MPU6050的数据获取、分析与处理

    Arduino教程:MPU6050的数据获取.分析与处理 转载 摘要 MPU6050是一种非常流行的空间运动传感器芯片,可以获取器件当前的三个加速度分量和三个旋转角速度.由于其体积小巧,功能强大,精度 ...

  10. CRF++地名实体识别(特征为词性和词)

    http://x-algo.cn/index.php/2016/02/29/crf-name-entity-recognition/ 类似使用CRF实现分词和词性标注,地域识别也是需要生成相应的tag ...