Asyncdisplaykit是iOS框架,让即使是【最复杂】的用户界面,也能够快速响应。
这篇文章写得不错
1、怎么让主线程尽可能清晰流畅?
- 这个库能让你通过将图像解码、布局以及渲染操作放在后台线程。那就是无论如何它都能够让你的APP流畅运行!
- 保持用户界面的快速响应,你的应用应该呈现在60帧每秒的iOS上的金标准。这意味着主要的threadhas六十分之一秒将每帧。这是16毫秒执行所有的布局和绘图代码!由于系统开销,你codeusually少于十毫秒运行之前,它就会引起丢帧。
- 幸运的是: asyncdisplaykit让你移动图像解码、文本大小和渲染,和其他昂贵的UI操作关闭主线程。
帧率
- 首先, UIKit 优化很难达到 60 FPS 的滚动帧率。如果达到这个水准,几乎感觉不到卡顿,也可以说不存在卡顿现象,那么意味着你的APP将会非常的流畅!
节点(Node)
如果你使用的观点,你已经知道如何使用节点。大多数方法都有一个节点等效最UIView和CALayer属性是可用的以及。在任何情况下,那里是一个命名的差异(如。clipstobounds VS。maskstobounds),节点将默认为UIView的名字。唯一的例外是节点代替使用中心位置。
当然,你总是可以访问底层的视图或层直接通过node.view或node.layer
- 一些asyncdisplaykit核心节点包括:
**asdisplaynode
**。UIView子类对应使自定义节点。
**ascellnode
**。对应uicollectionviewcell或UITableViewCell -类使定制的细胞或一个视图控制器初始化。
**ascontrolnode
**。类似于控件的子类的制作按钮。
**asimagenode
**。像UIImageView -解码图像异步。
**astextnode
**。像UITextView建造全featuredrich文本支持TextKit。
节点的容器
将一个应用程序使用asyncdisplaykit时,一个常见的错误是添加节点直接到一个已经存在的视图层次结构。这样做将几乎保证你的节点将Flash作为他们的呈现。
相反,你应该添加的节点作为一个容器类的子节点。这些类中包含节点告诉他们目前在什么状态,数据可以被加载和节点可以提供尽可能高效充电。你应该想到这些类UIKit和ASDK之间的整合点。
四节点的容器:
**asviewcontroller
**。一个UIViewController类允许你提供管理节点。
**ascollectionnode
**。类似于管理一系列ascellnodes UICollectionView。
**astablenode
**。类似的表格也采用ascellnode但与固定宽度。
**aspagernode
**。一个专门的ascollectionnode可以以同样的方式作为一个uipageviewcontroller。
布局引擎
asyncdisplaykit的布局引擎是最强大和最独特的特征。基于CSS的flexbox模型,它提供了一种声明方式指定自定义节点的大小和它的子节点的布局。当所有节点都默认情况下同时呈现,异步测量和布局提供了每个节点的aslayoutspec进行。
布局引擎是基于的想法aslayouts包括位置、大小、aslayoutspecs定义不同的布局概念和用于输出计算aslayout。布局规格可由两个子节点以及其他规格的布局
几个版面规格:
**aslayoutspec
**。产生的大小和位置的相关节点。
**asstacklayoutspec
**。你可以把节点在一个非常类似的方式uistackview。
**asbackgroundlayoutspec
**。设置一个节点的背景。
**asstaticlayoutspec
**。有用的当你想手动定义一个静态尺寸包含一组节点。
智能预压(Intelligent Preloading)
- 当节点被添加到一个滚动或分页界面通常在下列范围。这意味着,滚动视图滚动,其界面态将当他们通过他们更新。
一个节点将在以下范围:
**获取数据的范围:
**最远的范围从可见。这是那里的内容来自外部源的聚集,无论是一些API或本地磁盘。
**显示范围:
**这里显示的任务,如文本光栅化和图像解码发生。
**可见范围:
**节点是由至少一个像素的屏幕。
在上面的Pinterest红色框可视化,用户向下滚动。你可以看到,在主要方向的范围大小相当的大于用户正在从内容(背向)。如果用户改变方向,前、后两侧会动态地交换以保持内存使用优化。这允许你担心定义的前导和尾随的大小而不必担心改变滚动方向的用户反应。
在这个例子中,你还可以看到如何智能预压工作在多个维度。在Pinterest中间,你可以看到一个鼓的图片滚动元件。这些并不在设备屏幕上还可见(红色),但它有它自己的范围控制器,在获取数据节点(黄色)和显示(橙色)范围。
- 有兴趣的话看看官网