事件响应
当一个硬件事件发生后
首先有 IOKit.framework 生成一个 IOHIDEvent 事件
并由SpringBoard接收
然后通过 mach port 转发给需要的app进程
随后苹果注册的 Source1 会触发回调
并调用_UIApplicationHandleEventQueue()进行内部的分发
_UIApplicationHandleEventQueue() 会把 IOHIDEvent 处理 并包装成 UIEvent ,其中包括旋转,触摸等发送给window
手势识别
当 _UIApplicationHandleEventQueue() 识别了一个手势时
会首先调用 cancel 当前的 touchesBegin/Move/End 系列回调给打断
随后系统将对应的 UIGestureRecognizer 标记为待处理
苹果注册了一个 Observer 监测 BeforeWaiting(Loop即将进入休眠)事件
这个observer的回调函数为:_UIGestureRecognizerUpdateObserver()
其内部会获取所有刚被标记为待处理的 GestureRecognizer
并执行 GestureRecognizer 的回调
当有 UIGestureRecognizer 的变化(创建/销毁/状态改变)时,这个回调都会进行相应处理。
网友评论