新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > iOS 7: 隱藏的特性和解決之道

iOS 7: 隱藏的特性和解決之道

作者: 時(shí)間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

這里顯示了你該如何獲取一個(gè)用CTFontDescriptorRef標(biāo)示可下載的字體數(shù)組:

CFDictionary *descriptorOptions = @{(id)kCTFontDownloadableAttribute : @YES};

CTFontDescriptorRef descriptor = CTFontDescriptorCreateWithAttributes((CFDictionaryRef)descriptorOptions);

CFArrayRef fontDescriptors = CTFontDescriptorCreateMatchingFontDescriptors(descriptor, NULL);

系統(tǒng)不會檢查字體是否已存在于磁盤上而將直接返回同樣的列表。另外,這個(gè)方法可能會啟用網(wǎng)絡(luò)并造成阻塞,你不應(yīng)該在主線程中使用它。

使用如下基于塊的 API 來下載字體:

bool CTFontDescriptorMatchFontDescriptorsWithProgressHandler(

CFArrayRef descriptors,

CFSetRef mandatoryAttributes,

CTFontDescriptorProgressHandler progressBlock)

這個(gè)方法能操作網(wǎng)絡(luò)并傳遞下載進(jìn)度信息來調(diào)用你的progressBlock方法直到下載成功或者失敗。參考蘋果的 DownloadFont 樣例看如何使用它。

有一些值得注意的地方,這里的字體只在當(dāng)前程序周期內(nèi)有效,下次運(yùn)行將被重新載入內(nèi)存。因?yàn)樽煮w存放在共享空間中,你不能依賴于它們是否可用。很有可能也不能保證的說,系統(tǒng)會清理這個(gè)目錄,或者你的程序被拷貝到新的設(shè)備環(huán)境中,而這時(shí)又沒有這個(gè)字體存在,同時(shí)當(dāng)前處于沒有網(wǎng)絡(luò)的環(huán)境中。在 Mac 或是模擬器上,你能根據(jù)kCTFontURLAttribute獲得字體的絕對路徑,加載速度也會提升,但是在 iOS 上是不可能的,因?yàn)檫@個(gè)目錄在你程序之外,你需要再次調(diào)用CTFontDescriptorMatchFontDescriptorsWithProgressHandler。

你也可以注冊新的kCTFontManagerRegisteredFontsChangedNotification通知來跟蹤新字體在何時(shí)載入到了字體注冊表中。你可以在 WWDC2013 的 Session223 “Using Fonts with TextKit”中查找更多信息。

這還不夠?

沒關(guān)系,iOS7 的新東西遠(yuǎn)不止如此!了解一下 NSHipster 你將明白語音合成相關(guān)的東西,base64、NSURLComponents、NSProgress、bar codes、reading lists 以及 CIDetectorEyeBlink。還有很多我們沒有涵蓋到的,比如蘋果 iOS7 的 API 變化,iOS 指南的新東西以及 Foundation Release Notes(這些都是服務(wù)于 OS X的,但是代碼都是共享的,也同樣適用于 iOS)。很多方法都還沒形成文檔,等著你來探究和 blog。


上一頁 1 2 3 4 下一頁

關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉