智能预加载
当一个node
能够被异步并发地渲染和测量时,它非常强大,另一个对纹理至关重要的层是智能预加载的思想。
正如在《入门》中指出的那样,在一个node
容器的上下文之外使用一个node
很少是有利的。这是因为所有node
都有其当前接口状态的概念。
此interfaceState
属性由所有容器在内部创建和维护的ASRangeController
不断更新。
在容器外部使用的node
不会被任何范围控制器更新其状态。这有时会导致闪烁,因为node
在意识到它们已经出现在屏幕上而没有任何警告后被渲染。
接口状态范围
将node
添加到滚动或分页接口时,它们通常位于以下范围之一。这意味着当滚动视图被滚动时,它们的接口状态将随着它们的移动而更新。
node
将位于以下范围之一:
Interface State | Description |
---|---|
Preload | 最远的距离。这是从外部源收集内容的地方,无论是API还是本地磁盘。 |
Display | 在这里,诸如文本栅格化和图像解码之类的显示任务将发生。 |
Visible | The node is onscreen by at least one pixel. |
调整范围参数
每一个范围的大小都是用“屏幕”来衡量的。虽然默认大小在许多用例中都能很好地工作,但是可以通过在滚动node
上设置范围类型的调优参数来轻松地调整它们。
在上述滚动集合的可视化中,用户正在向下滚动。如您所见,前导方向上的范围的大小比用户正在远离的内容(尾随方向)大很多。如果用户要改变方向,前边和后边将动态交换,以保持最佳内存使用率。这使您无需担心如何定义前导和尾随大小,而不必担心用户不断变化的滚动方向。
智能预加载还可以在多个维度中工作。
接口状态回调
当用户滚动时,node
在范围内移动,并通过加载数据、呈现等方式做出适当的反应。您自己的node
子类可以通过实现相应的回调方法轻松地利用这种机制。
Visible Range
-didEnterVisibleState
-didExitVisibleState
Display Range
-didEnterDisplayState
-didExitDisplayState
Preload Range
-didEnterPreloadState
-didExitPreloadState