翻譯自Texture
Texture 是建立在UIKit之上的iOS框架,可以保持最復(fù)雜的用戶界面的流暢和響應(yīng)蝙搔。它最初是為了使Facebook的頁(yè)面盡可能的流暢吃型,并與流行的基于物理的動(dòng)畫相輔相成 - 但它與UIKit Dynamics和常規(guī)應(yīng)用程序設(shè)計(jì)一樣強(qiáng)大勤晚。最近赐写,它被用來(lái)加強(qiáng)Pinterest的應(yīng)用重寫。
隨著框架的發(fā)展血淌,增加了許多功能悠夯,通過(guò)消除現(xiàn)代iOS應(yīng)用程序中常見的常見樣板結(jié)構(gòu)沦补,可以節(jié)省開發(fā)人員的時(shí)間夕膀。如果您曾經(jīng)處理過(guò)cell重復(fù)使用的錯(cuò)誤美侦,那么嘗試預(yù)先為頁(yè)面或滾動(dòng)樣式界面預(yù)加載數(shù)據(jù)易猫,甚至只是試圖讓您的應(yīng)用程序丟棄太多的框架准颓,從而可以從集成紋理獲益攘已。
一、入門
Texture的基本單位就是node
吠勘。 ASDisplayNode
是一個(gè)抽象UIView
看幼,j就想UIView
是一個(gè)抽象CALayer诵姜。不同于只能在主線程上使用的視圖搏熄,nodes
是線程安全的:您可以在后臺(tái)線程上并行實(shí)例化和配置它們的整個(gè)層次結(jié)構(gòu)心例。
為了保持其用戶界面的流暢和響應(yīng)止后,您的應(yīng)用程序應(yīng)該以每秒60幀的速度呈現(xiàn) - iOS上的黃金標(biāo)準(zhǔn)译株。這意味著主線程有一秒鐘的時(shí)間推動(dòng)每個(gè)幀歉糜。這是執(zhí)行所有布局和繪圖代碼的16毫秒匪补!并且由于系統(tǒng)開銷蚤氏,您的代碼通常在導(dǎo)致幀丟失之前運(yùn)行不到10毫秒竿滨。
Texture使您可以從主線程移除圖像解碼姐呐,文本大小和渲染以及其他昂貴的UI操作到其它線程,以保持主線程可用于響應(yīng)用戶交互鸠澈。 Texture還有其他的技巧笑陈,但是我們稍后會(huì)介紹涵妥。
節(jié)點(diǎn)
如果習(xí)慣于使用視圖,您已經(jīng)知道如何使用節(jié)點(diǎn)鹉勒。
大多數(shù)方法有一個(gè)節(jié)點(diǎn)相當(dāng)于大部分 UIView
和CALayer
性能也是可用的帆锋。在任何情況下,如果存在命名差異(如.clipsToBounds
vs .masksToBounds
)禽额,節(jié)點(diǎn)將默認(rèn)為該UIView
`名稱锯厢。唯一的例外是節(jié)點(diǎn)使用位置而不是中心。
當(dāng)然脯倒,您可以直接通過(guò)node.view
或直接訪問(wèn)底層視圖或圖層node.layer
实辑,只需確保在主線程上執(zhí)行!
Texture提供了各種節(jié)點(diǎn)來(lái)替代您以前使用的大多數(shù)UIKit組件藻丢。大規(guī)模應(yīng)用程序已經(jīng)能夠使用Texture節(jié)點(diǎn)完全編寫UI徙菠。
節(jié)點(diǎn)容器
將應(yīng)用轉(zhuǎn)換為使用紋理時(shí),常見的錯(cuò)誤是將節(jié)點(diǎn)直接添加到現(xiàn)有的視圖層次結(jié)構(gòu)中郁岩。這樣做將幾乎保證您的節(jié)點(diǎn)在呈現(xiàn)時(shí)將閃爍问慎。
相反,您應(yīng)該添加節(jié)點(diǎn)作為許多節(jié)點(diǎn)容器類之一的子節(jié)點(diǎn)歇终。這些容器負(fù)責(zé)告訴包含的節(jié)點(diǎn)他們當(dāng)前處于什么狀態(tài)奕短,以便可以加載數(shù)據(jù),并且可以盡可能高效地渲染節(jié)點(diǎn)佑刷。
您應(yīng)該將這些類作為UIKit和Texture之間的集成點(diǎn)。
布局引擎
紋理的布局引擎既是其最強(qiáng)大的功能之一频鉴,也是其最獨(dú)特的功能之一。基于CSS FlexBox
模型,它提供了一種聲明性的方式來(lái)指定自定義節(jié)點(diǎn)的大小和子節(jié)點(diǎn)的布局匙睹。雖然默認(rèn)情況下同時(shí)渲染所有節(jié)點(diǎn)梦谜,但是通過(guò)ASLayoutSpec
為每個(gè)節(jié)點(diǎn)提供異步測(cè)量和布局來(lái)執(zhí)行浴讯。
高級(jí)開發(fā)者功能
紋理提供了在UIKit或Foundation中無(wú)法找到的各種高級(jí)開發(fā)人員功能捏肢。我們的開發(fā)人員發(fā)現(xiàn),AsyncDisplyKit可以簡(jiǎn)化其架構(gòu)并提高開發(fā)人員的速度。
(全部列表即將推出U哂酢)
添加紋理到您的應(yīng)用程序
如果您是Texture的新手育八,建議您查看我們的ASDKgram示例應(yīng)用程序。
我們已經(jīng)創(chuàng)建了一個(gè)方便的指南(即將推出),并提供了一步一步的指導(dǎo)侨颈,并提供了關(guān)于如何向應(yīng)用程序添加紋理的示例耘分。
如果您遇到任何問(wèn)題芽丹,請(qǐng)聯(lián)系我們GitHub或Texture
Slack社區(qū)尋求幫助楼肪。
二当纱、資源
瀏覽我們的許多示例項(xiàng)目啥供。
如果您剛開始使用Texture,我們建議您先從[ASDKgram(https://github.com/texturegroup/texture/tree/master/examples/ASDKgram)示例應(yīng)用程序開始库糠,該應(yīng)用程序?qū)⑹褂肬IKit實(shí)現(xiàn)的照片F(xiàn)eed與使用Texture實(shí)現(xiàn)的相同F(xiàn)eed進(jìn)行比較伙狐。應(yīng)用功能:
一個(gè)無(wú)限滾動(dòng)的家庭飼料艘虎,顯示紋理更平滑的滾動(dòng)表現(xiàn)妄呕。
一個(gè)顯著大小的代碼庫(kù)停做,以演示使用紋理設(shè)計(jì)應(yīng)用程序所需的代碼少得多飒房。
視頻
AsyncDisplayKit 2.0:定義第七個(gè)抽象層 **[Pinterest HQ 2016]
使用AsyncDisplayKit 2.0進(jìn)行規(guī)模布局 [NSMeetup 2016]
ASCollectionNode [Pinterest HQ 2016]
AsyncDisplayKit代碼狀態(tài) [WWDC 2016]
AsyncDisplayKit 2.0:智能用戶界面 **[NSSpain 2015]
AsyncDisplayKit的輕松回應(yīng) **[MCE 2015]
異步UI [NSLondon 2014]
教程/文章
使用AsyncDisplayKit在iOS中開發(fā)響應(yīng)式UI **[Ziad Tamim媚值,12.29.2016]
AsyncDisplayKit 2.0教程:自動(dòng)布局 **[Luke Parham情屹,12.19.2016]
AsyncDisplayKit 2.0教程:入門 **[Luke Parham,12.5.2016]
iOS平滑滾動(dòng)在緩沖區(qū)為iOS:如何(和為什么)我們實(shí)現(xiàn)AsyncDisplayKit **[安迪Yates杂腰,11.4.2016]
布局資源
Texture強(qiáng)大的布局系統(tǒng)是基于CSS FlexBox模型垃你。
這些網(wǎng)站可用于學(xué)習(xí)此系統(tǒng)的基礎(chǔ)知識(shí)。
- ASStackLayout游戲
- [CSS3 Flexbox視覺指南](https://demos.scotch.io/visual-guide-to-css3-
- flexbox-flexbox-playground/demos/)
- FlexBox模式
三喂很、安裝
Texture可以通過(guò)CocoaPods或Carthage添加到您的項(xiàng)目中惜颇。不要忘記導(dǎo)入框架頭:
#import <AsyncDisplayKit / AsyncDisplayKit.h>```
或創(chuàng)建一個(gè)[Objective-C橋接頭](https://developer.apple.com/library/ios/documentation/swift/conceptual/buildingcocoaapps/MixandMatch.html)(Swift)。
如果您在安裝紋理時(shí)遇到任何問(wèn)題少辣,請(qǐng)通過(guò)Github或[Slack](http://texturegroup.org/slack.html)聯(lián)系我們凌摄!
#### 1、CocoaPods
CocoaPods提供[Texture](https://cocoapods.org/pods/Texture)漓帅。
將以下內(nèi)容添加到您的Podfile中:
target 'MyApp' do
pod "Texture"
end
在運(yùn)行前完全退出Xcode
在終端的項(xiàng)目目錄里锨亏,
pod install
要更新您的Texture版本,請(qǐng)?jiān)诮K端的項(xiàng)目目錄里運(yùn)行
pod update Texture
#### 2忙干、Carthage (standard build)
>使用Carthage的標(biāo)準(zhǔn)方法是將Cartfile列出為依賴關(guān)系器予,然后運(yùn)行`carthage update`將依賴關(guān)系下載到`Cathage / Checkouts`文件夾中,并將其中的每一個(gè)構(gòu)建到位于“Carthage / Build”文件夾中的框架中捐迫,最后開發(fā)人員必須手動(dòng)整合項(xiàng)目乾翔。
Texture 也可以通過(guò)[Carthage](https://github.com/Carthage/Carthage)安裝。
將以下內(nèi)容添加到您的Cartfile以獲取**最新版本**的分支:
github“texturegroup / texture”
或者是施戴,主分支
github“facetexturegroup / textureaster”
Texture有自己的Cartfile列出它的依賴關(guān)系反浓,所以這是您需要包含在您的Cartfile中的唯一一行。
carthage update
在終端赞哗,這將獲取`Carthage/Checkouts`文件夾的依賴關(guān)系雷则,然后構(gòu)建每個(gè)文件夾。
查找終端輸出確認(rèn)`Texture`肪笋,`PINRemoteImage (3.0.0-beta.2)`并且`PINCache`都被取出和建立月劈。Texture框架Cartfile應(yīng)正確處理依賴關(guān)系。
在Xcode中涂乌,在應(yīng)用程序目標(biāo)的**“常規(guī)”**設(shè)置選項(xiàng)卡上的 **“鏈接框架和庫(kù)”**部分中艺栈,從`Carthage/Build`磁盤上的文件夾中拖放要使用的每個(gè)框架。
#### 3湾盒、Carthage (light)
`Texture`不支持使用`Carthage`的輕量級(jí)的方法湿右,您可以手動(dòng)添加項(xiàng)目文件。這是因?yàn)樗囊粋€(gè)依賴關(guān)系`PINCache`(一個(gè)嵌套的依賴關(guān)PINRemoteImage)還沒(méi)有一個(gè)項(xiàng)目文件罚勾。
如果不包括`PINRemoteImage`與`PINCache`毅人,你不會(huì)得到紋理的完整圖像的功能集吭狡。