博客> 从初心出发,了解原理本身---响应链机制
从初心出发,了解原理本身---响应链机制
2017-09-24 07:01 评论:0 阅读:584 Yuan001
UIResponder 事件传递

首先问一个问题:UILabel和UIButton的区别,为何后者能点击触发事件,前者不能?

区别在于:UIButton继承了UIResponder。

UIResponder:专门用来响应用户的操作处理各种事件的,包括触摸事件(Touch Events)、运动事件(Motion Events)、远程控制事件(Remote Control Events,如插入耳机调节音量触发的事件)。

方法: @interface UIResponder : NSObject

  • (void)touchesBegan:(NSSet )touches withEvent:(UIEvent )event;//触摸屏幕
  • (void)touchesMoved:(NSSet )touches withEvent:(UIEvent )event;//在屏幕上移动
  • (void)touchesEnded:(NSSet )touches withEvent:(UIEvent )event;//离开屏幕
  • (void)touchesCancelled:(NSSet )touches withEvent:(UIEvent )event;//系统事件干扰

事件产生原理:

  • 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中,为什么是队列而不是栈?因为队列的特点是先进先出,先产生的事件先处理才符合常理,所以把事件添加到队列。
  • UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow)。
  • 主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,这也是整个事件处理过程的第一步。 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理。 3.2.事件的传递
  • 触摸事件的传递是从父控件传递到子控件
  • 也就是UIApplication->window->寻找处理事件最合适的view

1.触发事件--加入到UIApplication管理队列(先进先出)--到主窗口(keyWindow)---控制器(Controller)--子视图中要找的视图

2.点位要找的视图的原理:locationInView:(监控手势点击的坐标),根据坐标范围来遍历判断找到触发事件的视图。  111.jpg

收藏
1
sina weixin mail 回到顶部