UI_事件、响应者链、手势

  • 事件的基本概念
  • 触摸的基本概念
  • 响应者链 
  • 手势识别器 

 


事件的基本概念

事件概述:

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

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

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


触摸的基本概念UITouch

 实现触摸

UIView支持触摸事件(因为继承与UIResponder),而且支持多点触摸。

UITouch *touch = [touch anyObject]; //得到touch

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

1 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
2 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
3 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
4 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;触摸中断(电话)

touch的属性

  1. 这个点当前的View和Window 
  2. locationInView当前手指的位置
  3. PreviousLocationInView上一次手指的位置

 

 触碰检测

  • Hit-Test通过检测找出touch发生在哪个视图上,递归检测所有子视图,定位准确位置 

 

UIResponder 

  • UIResponder:响应者,是可以响应事件并且可以对其进行处理的对象
  • UIResponder是响应者的基类,UIApplication、UIView和所有从UIView派生出来的子类都是源自它
  • 第一响应者是当前正在接收事件的响应者对象

 

响应者链 

什么是响应者链? 

有多个响应者对象组成的链 ,定义了iOS中触摸事件的交互规则

什么是响应者? 

  1.  UIResponder。响应者类
  2. iOS中所有能响应事件(触摸、晃动、远程事件)的对象都是响应者。
  3. 系统定义了一个抽象的父类UIResponder来表示响应者。其子类都是响应者 

 

 检测触碰视图:

    1. 硬件检测到触碰操作,会将消息交给UIApplication,开始检测。
    2. UIApplication->Window->viewController->view->检测所有子视图 
    3. 最终确认碰触位置,完成响应者链的查询过程。

 

阻断响应者链:

    1. 响应者链可以被打断。无法完成检测查询过程。
    2. 视图类的属性:userInteractionEnabled。关闭后能阻断查询过程。此属性是UIView的,所有的子类都能设置,当视图hidden属性为yes或者alpha为0时,视图也不接收事件
    3. 在一定时间内关闭事件传递:应用程序调用UIApplication的beginIgnoringInteractionEvents和endIgnoringInteractionEvents 

 


手势识别器 

什么是手势识别器? 

    1. 手势识别器是对触摸事件做了封装,我们无需自己判断某个手势是否触发,手势识别器本身起到了识别作用,我们把重心放在识别之后要做什么操作上面。
    2. 手势识别器是iOS中比较抽象的一个类,用于识别一个手势,所谓手势:有规律的触摸 

 

手势识别器的分类:

手势识别器有7个子类

    1. 轻拍手势UITapGestureRecognizer 
    2. 平移手势UIPanGestureRecognizer 
    3. 轻扫手势UISwipeGestureRecognizer 
    4. 缩放手势UIPinchGestureRecognizer 
    5. 旋转手势UIRotationGestureRecognizer 
    6. 长按手势UILongPressGestureRecognizer 
    7. 屏幕边缘平移手势UIScreenEdgeGestureRecognizer 

 

 如何使用识别器

    1. 创建UIxxxGestureRecognizer对象,使用initWithTarget:action:方法
    2. 配置要识别的手势的相关信息
    3. 将手势添加到某个视图上
    4. 实现手势识别球里定义的方法

 

view的transform属性

 transform是view的一个重要属性,它在矩阵层上改变view的显示状态,能实现view的缩放、旋转、平移功能。

 

posted @ 2015-04-11 16:40  captivity  阅读(155)  评论(0)    收藏  举报