iOS

AsyncDisplayKit_2.0

AsyncDisplayKit Tutorial:Getting Started

Posted by kunnan on March 23, 2017

前言

一些主线程开销较大的任务

  • 计算尺寸和布局:比如 -heightForRowAtIndexPath:,或者在UILbel中调用 -sizeThatFits 以及 AutoLayout‘s布局计算。
  • 图像解码:想要在一个 image view 中使用 UIImage,首先要进行解码。
  • 绘图:复杂的文本以及手动绘制渐变和阴影。
  • 对象生命周期:创建,操纵和销毁系统对象(创建一个UIView)

开始

  • 该项目使用 CocoaPods 来拉入AsyncDisplayKit。

ASDisplayNode 简介

ASDisplayNode 是ASDK的核心类,它只是一个类似于 MVC 中的 “View” 一样的UIViewCALayer

记住,iOS应用程序中的所有在屏幕上的显示都通过CALayer对象表示的。UIViews 创建并且拥有一个底层的 CALayer,并为他们添加触摸处理和其他交互功能。UIView 并不是 CALayer 的子类,而是相互环绕,扩展其功能。

  • 通常由 Node 创建的一个常规的view,其创建和配置都在行队列中执行,并且异步渲染。

节点容器(The Node Containers)

  • ASViewController:一个 UIViewController 的子类,允许你提供要管理的 Node。
  • ASCollectionNode and ASTableNode:Node 等效于 UICollectionViewUITableView,其子类实际上保留在底层。
  • ASPagerNode:一个ASCollectionNode的子类,提供极好的滑动性能相比与 UIKitUIPageViewController 来说。

TableNode

将 TableView 替换为 TableNode

设置 TableNode 的 DataSource & Delegate

遵循 ASTableDataSource

遵循 ASTableDelegate

无限滚动

  • 预先确定好你需要加载的页数。

智能预加载

  • ASRangeController
  • 在每个容器类中,所有包含的 node 都有一个接口状态的概念。在任何给定的时间,一个 node 可以是下面的任意组合:
  • Preload Range(预载范围):通常最远的范围从可见区域。这是当cell的每个 subNode (例如ASNetworkImageNode) 的内容从外源加载,例如API和本地缓存。这与批量获取时,使用用模型对象代表cell本身形成对比。
  • Display Range(显示范围):在这里进行显示任务,例如文本绘制和进行图像解码。
  • Visible Range(可见范围):此时,node 至少有一个像素在屏幕上。

这些范围也适用于 screenfuls 的度量,并且可以使用 ASRangeTuningParameters 属性轻松调整。

Node接口的状态回调

Node 命名

  • cardNode 添加一个 debugName
//回到代码`-tableNode:nodeBlockForRowAtIndexPath:`
cardNode.debugName = [NSString stringWithFormat:@"cell %zd", indexPath.row];

观察 Cells

进入 CardNode_InterfaceCallbacks.m 中,你可以找到六种追踪 node 在 ranges 中的状态的方法。

转载请注明: > AsyncDisplayKit_2.0