智能的预加载机制
虽然 Texture 异步并行渲染和计算的能力使其异常强大,但其实 Texture 还有另一个非常重要的特性: 智能预加载.
正如Getting Started中指出的那样,在一个节点容器的上下文之外使用节点是很有利的.这是因为所有节点都具有其当前UI状态的概念。
这个interfaceState
属性由一个ASRangeController
不断地更新,而所有的容器都在这个ASRangeController
内创建和维护.
在容器外部使用的节点不会由任何范围控制器更新其状态。 这有时会导致闪烁,因为节点在被添加到屏幕上后而没有任何警告地渲染。
页面状态范围
将节点添加到滚动或分页界面时,它们通常处于以下范围之一。 这意味着当滚动视图滚动时,它们的界面状态将在它们移动时更新。
一个节点会处于以下范围类型:
界面状态 | 描述 |
---|---|
Preload | 距离 visible 最远的范围, 这是从外部源收集内容的地方,无论是某些API还是本地磁盘。 |
Display | 在这个区域, 发生诸如文本光栅化和图像解码的显示任务。 |
Visible | 节点被展示在屏幕上, 至少要有一个像素 |
ASRangeTuningParameters
这些区域的尺寸以"屏幕大小"为单位来测量, 虽然默认的尺寸适用于大部分情况, 但是通过在scrolling node
上设置tuning parameters
, 你可以非常轻松地调整它们.
在上面滚动集合的可视化视图中, 用户正在向下滚动. 正如你所看到的那样, Leading 方向的范围大小远大于 Trailing 方向的. 如果用户改变了混动方向, 则 Leading 和 Trailing 将会动态交换以使内存状况保持最佳. 这种方式使得你只需要设定leading and trailing sizes
, 而不用担心滚动方向的改变.
智能预加载同样适用于多维的情况.
界面状态回调
当用户滚动时,节点在范围内移动并通过加载数据,渲染等来适当地做出反应。您自己的节点子类可以通过实现相应的回调方法轻松地利用这种机制。
Visible 范围
-didEnterVisibleState
-didExitVisibleState
Display 范围
-didEnterDisplayState
-didExitDisplayState
Preload 范围
-didEnterPreloadState
-didExitPreloadState
Just remember to call super ok? ?