事件响应和手势识别

事件响应

当一个硬件事件发生后
首先有 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 的变化(创建/销毁/状态改变)时,这个回调都会进行相应处理。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • https://blog.ibireme.com/2015/05/18/runloop/ RunLoop 是 iO...
    SmallDe阅读 728评论 0 51
  • RunLoop 是 iOS 和 OS X 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,...
    iOS_Alex阅读 920评论 0 10
  • Runloop是iOS和OSX开发中非常基础的一个概念,从概念开始学习。 RunLoop的概念 -般说,一个线程一...
    小猫仔阅读 1,038评论 0 1
  • 转载:http://www.cocoachina.com/ios/20150601/11970.html RunL...
    Gatling阅读 1,488评论 0 13
  • RunLoop 的概念 一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线...
    Mirsiter_魏阅读 640评论 0 2