iOS中事件响应的学习记录

touch事件分为3类

  • 触控事件(单点、多点触控以及各种手势操作)
  • 传感器事件(重力、加速度传感器等)
  • 远程控制事件(远程遥控iOS设备多媒体播放等)


触控事件分为加入了手势 也没有加入的情况,如果加入了手势,手势会截取点击事件.手势分为好几种,例如单击,长按,拖拽等.如果是单击事件的话状态就会是从可识别到成功或失败,如果是多点触摸就会由可识别,到失败或者开始,改变,已识别或取消.


UITouch

  • touchesBegan:withEvent:
  • touchesMoved:withEvent:
  • touchesEnded:withEvent:
  • touchesCancelled:withEvent:



响应者链

hit-test view

hitTest:withEvent:方法的处理流程如下:

首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内;

若返回NO,则hitTest:withEvent:返回nil;

若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消息,所有子视图的遍历顺序是从最顶层视图一直到到最底层视图,即从subviews数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕;

若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束;

如所有子视图都返回非,则hitTest:withEvent:方法返回自身(self)。


事件传递机制

view 向上一层传递,如果上一层不能响应还会向上一层继续传递,一直传递到rootVC,如果rootvc还不能相应的话则会传递给windows,如果windows还不能相应的话,会传递给application,如果继续不能相应则废弃这次触摸事件.


参考文章:iOS事件机制 Cocoa Touch事件处理流程--响应者链

你可能感兴趣的:(ios,事件机制,UITouch,hit-test,Recognizers)