iOS Texture <AsyncDisplayKit> 智能预加载

智能预加载

当一个node能够被异步并发地渲染和测量时,它非常强大,另一个对纹理至关重要的层是智能预加载的思想。

正如在《入门》中指出的那样,在一个node容器的上下文之外使用一个node很少是有利的。这是因为所有node都有其当前接口状态的概念。

interfaceState属性由所有容器在内部创建和维护的ASRangeController不断更新。

在容器外部使用的node不会被任何范围控制器更新其状态。这有时会导致闪烁,因为node在意识到它们已经出现在屏幕上而没有任何警告后被渲染。

接口状态范围

node添加到滚动或分页接口时,它们通常位于以下范围之一。这意味着当滚动视图被滚动时,它们的接口状态将随着它们的移动而更新。
在这里插入图片描述
node将位于以下范围之一:

Interface StateDescription
Preload最远的距离。这是从外部源收集内容的地方,无论是API还是本地磁盘。
Display在这里,诸如文本栅格化和图像解码之类的显示任务将发生。
VisibleThe node is onscreen by at least one pixel.

调整范围参数

每一个范围的大小都是用“屏幕”来衡量的。虽然默认大小在许多用例中都能很好地工作,但是可以通过在滚动node上设置范围类型的调优参数来轻松地调整它们。
在这里插入图片描述
在上述滚动集合的可视化中,用户正在向下滚动。如您所见,前导方向上的范围的大小比用户正在远离的内容(尾随方向)大很多。如果用户要改变方向,前边和后边将动态交换,以保持最佳内存使用率。这使您无需担心如何定义前导和尾随大小,而不必担心用户不断变化的滚动方向。

智能预加载还可以在多个维度中工作。

接口状态回调

当用户滚动时,node在范围内移动,并通过加载数据、呈现等方式做出适当的反应。您自己的node子类可以通过实现相应的回调方法轻松地利用这种机制。

Visible Range

-didEnterVisibleState
-didExitVisibleState

Display Range

-didEnterDisplayState
-didExitDisplayState

Preload Range

-didEnterPreloadState
-didExitPreloadState
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值