ios底层原理

iOS-button响应流程

2022-08-08  本文已影响0人  erlich

Button响应首先从触摸屏幕开始

在这之前,需要了解坐标转换及原因

程序员的逻辑往往如图所示

image.png

也就是UI逻辑中,使用的坐标点往往是相对于父布局的,而布局会嵌套多层

屏幕上的触点,判断落点归属于哪个UI控件的话,就需要让所有UI控件的坐标点转换为相对于 window的

这样转换后的坐标就变为

image.png

直观是这样的逻辑,但真实的检测过程实际是 按照ui嵌套层级关系递归进行的,也就是从window开始,一级一级子视图倒序遍历进行

这样在每递归到某一层view时,就需要对此view子视图进行检测,这个时候就需要把当前view上的触点坐标转换为 子视图view上的坐标

image.png

说白了,在检测阶段,每次递归检测时,转换坐标 就是遍历子view时,point从相对于当前view 改变为 相对于 子view,也就是改变了参考基点

简单梳理流程

image.png

apple-touch封装

touchBegan/touchMoved/touchEnded/touchCancelled 是底层的方式

apple提供了高级封装 UIGestureRecognizerUIControl

UIGestureRecognizer 包含8种手势

window sendTouchesForEvent 后续流程修正

上面的流程是基于底层方式描述,针对于apple封装的 UIGestureRecognizer,做出调整

window 查询到具体的 响应者之后

还有一些额外设定, 比如:

流程进一步细化

UIControl 是UIView子类

保持前面修正的流程

上一篇下一篇

猜你喜欢

热点阅读