视图更新和渲染循环(render loop)有关,工作流程如下图:
渲染循环.png
主要分三步:
- 更新约束,从下往上,最终到达Window,
- 布局,从上往下
- 展示
每一步都有对应的api
对应api.png
在iOS应用中,Window一般为顶级视图,每个window中都有一个布局引擎(engine),当往视图添加约束的时候,实际上是在引擎中添加了一系列等式,引擎负责计算出这些等式中所有变量的值,最终得出视图的约束。
engine.png engine1.png
在engine对约束计算完毕后,就会告知该视图,该视图则会通知它的上级视图,我需要更新约束了,这个过程通常需要调用
- (void)setNeedsLayout;
在进入layout阶段后,会调用
- (void)layoutSubviews;
在engine中,多个不同块的布局互不干扰,复杂度呈线性增加。
The engine is a layout cache and dependency tracker.
网友评论