Texture是由Facebook開源的AsyncDisplayKit演變而來
特性
Texture的基礎單元是一個個node,ASDisplayNode是基于CALayer的一層抽象。不同于UIView對象,ASDisplayNode是線程安全的,它不僅僅可以用于主線程而且可以在輔線程中使用。
使用Texture可以讓我們在輔線程中進行圖片的解析、文本的適應、約束等等UI操作,從而能夠保證主線程及時對用戶的操作做出反應
常用類
-
ASViewController: 基于UIViewController封裝的子類,能夠方便的為我們提供node的管理 -
ASNavigationController: 可用于替代UINavigationController,遵循ASVisibility協(xié)議 -
ASTabBarController: 可用于替代UITabBarController,遵循ASVisiblity協(xié)議 -
ASCollectionNode、ASTableNode:等同于UICollectionView、UITableView -
ASPagerNode:基于ASCollectionNode封裝的子類,能夠像UIPageViewController一樣給我們提供強大的滑動操作體驗 -
ASCellNode:等同于UITableViewCell、UICollectionViewCell,需要強調(diào)的是它返回的是一個Block(ASCellNodeBlock)。 -
ASScrollNode: 代替UIScrollView -
ASEditableTextNode: 代替UITextView -
ASTextNode: 代替UILabel -
ASImageNode: 代替UIImage -
ASNetworkImageNode: 可以自動加載圖片并進行內(nèi)存管理,而且還支持逐步加載Jpeg和動態(tài)gif圖片 -
ASMultiplexImageNode: -
ASVideoNode: 代替AVPlayerLayer -
ASVideoPlayerNode: 代替UIMoviePlayer -
ASControlNode: 代替UIControl -
ASButtonNode: 代替UIButton -
ASMapNode: 代替MKMapView -
ASStackLayoutSpec: 堆放布局規(guī)則 -
ASOverlayLayoutSpec: 覆蓋布局規(guī)則 -
ASRelativeLayoutSpec: 相對布局規(guī)則 -
ASInsetLayoutSpec: 插入布局規(guī)則 -
ASBackgroundLayoutSpec: 背景布局規(guī)則 -
ASCenterLayoutSpec: 中心布局規(guī)則 -
ASAbsoluteLayoutSpec: 絕對布局規(guī)則 -
ASRatioLayoutSpec: 比例布局規(guī)則
層級結(jié)構(gòu)
graph TB
ASDisplayNode-->ASTableNode
ASDisplayNode-->ASCollectionNode
ASDisplayNode-->ASCellNode
ASDisplayNode-->ASScrollNode
ASDisplayNode-->ASEditableTextNode
ASDisplayNode-->ASControlNode
ASCollectionNode-->ASPagerNode
ASControlNode-->ASButtonNode
ASControlNode-->ASTextNode
ASControlNode-->ASMapNode
ASControlNode-->ASImageNode
ASImageNode-->ASNetworkImageNode
ASImageNode-->ASMultiplexImageNode
ASNetworkImageNode-->ASVideoNode
批抓取進行無限滾動
// 將leadingScreensForBatching 設置為1.0表示當滾動到還剩下一個全屏時就開始抓取新的一批數(shù)據(jù)
self.tableNode.view.leadingScreensForBatching = 1.0;
- (BOOL)shouldBatchFetchForTableNode:(ASTableNode *)tableNode {
return YES;
}
ASDK的容器
當在項目中替換使用AsyncDisplayKit的時候,應該把nodes節(jié)點,當做一個子節(jié)點添加到一個容器類里,這些容器類負責告訴所包含的節(jié)點,他們現(xiàn)在是什么狀態(tài),以便盡可能有效的加載數(shù)據(jù)和渲染,經(jīng)常犯的一個錯誤是把node節(jié)點直接添加到一個現(xiàn)有的view中,這樣做會導致節(jié)點在渲染的時候會閃爍一下。
Texture為我們提供了以下這些節(jié)點容器:
ASCollectionNodeASPagerNodeASTableNodeASViewControllerASNavigationControllerASTabBarController
使用節(jié)點容器的好處
節(jié)點容器能夠自動為它的節(jié)點們管理高效的預加載,這就意味著節(jié)點容器中所有的節(jié)點的尺寸約束、數(shù)據(jù)請求、圖片解析、渲染都將是異步進行
核心機制
Texture模擬了Core Animation的機制,所有針對ASNode的修改和提交,總有些任務是必需放在主線程執(zhí)行的,當這種任務出現(xiàn)的時候,ASNode就會把任務用ASAsyncTransaction(Group)封裝并提交到一個全局的容器去。Texture在RunLoop中注冊了一個Observer,監(jiān)視的事件和CA一樣,但是優(yōu)先級比CA低。當RunLoop進入休眠前,CA處理完事件后,ASDK就會執(zhí)行該loop內(nèi)提交的所有任務
利用這個機制,Texture可以在合適的機會把異步、并發(fā)的操作同步到主線程去,并且獲得不錯的性能
用法
利用ASTableNode替代UITableView創(chuàng)建一個高性能的列表頁面
利用ASLayoutSpec替代AutoLayout創(chuàng)建高效的頁面約束
歡迎訪問我的個人博客