iOS事件机制

2020-09-17  本文已影响0人  路在脚下了

iOS事件可以分为3种:

下面主要说的是Touch Events(触摸事件),事件整个过程可以分为两个过程:

  1. 传递:是当我们触摸屏幕时,为我们找出最适合的View
  2. 响应:当我们找出最适合的View后,此时找到的View并不一定是最适合响应此事件的View,所以需要继续找出能响应此次触摸事件的View。

下图是通过这两个方法寻找最适合的View

func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? 
func point(inside point: CGPoint, with event: UIEvent?) -> Bool 
hitTest检测.png

下图是遍历subViews时,是倒叙遍历的,如果找到最适合View时,那么为遍历到的subView不会继续遍历。

检测点击View.png

下图是事件响应阶段,响应链。传递阶段与之相反。


事件传递.png

在事件响应过程中,找到最适合的View时,会先判断view.gestureRecognizers属性是否为空,如果不为空,直接响应手势,响应链结束。为空时,判断touches began moved end cancel 四个方法有无实现,如果实现了,那么响应链结束,实现这四个方法。
UIControl之所以可以直接响应事件,是因为它默认实现了touches began moved end cancel 四个方法。

上一篇 下一篇

猜你喜欢

热点阅读