1. 程式人生 > >IOS6 _內建字型庫下載,輕鬆實現字型主體變換

IOS6 _內建字型庫下載,輕鬆實現字型主體變換

大家都發現在很多閱讀類APP中都有很多字型風格,如果自己實現比較的麻煩,需要打包字型庫內嵌到專案中,字型庫又大,大多數情況下吃力不討好;如果想做一個個性點APP,想要實現不同風格字型,有沒有的能夠簡單的實現呢?

今天發現蘋果官方的文件顯示IOS6支援應用內字型庫直接動態下載:

蘋果官方動態下載連結:Demo工程

1、判斷是否下載過該字型

  1. - (BOOL)isFontDownloaded:(NSString *)fontName {  
  2.     UIFont* aFont = [UIFont fontWithName:fontName size:12.0];  
  3.     if
     (aFont && ([aFont.fontName compare:fontName] == NSOrderedSame  
  4.                || [aFont.familyName compare:fontName] == NSOrderedSame)) {  
  5.         return YES;  
  6.     } else {  
  7.         return NO;  
  8.     }  
  9. }  

2、下載指定字型名稱字型庫

  1. // 用字型的PostScript名字建立一個Dictionary
  2. NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithObjectsAndKeys:fontName, kCTFontNameAttribute, nil];  
  3. // 建立一個字型描述物件CTFontDescriptorRef
  4. CTFontDescriptorRef desc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)attrs);  
  5. // 將字型描述物件放到一個NSMutableArray中
  6. NSMutableArray *descs = [NSMutableArray arrayWithCapacity:0];  
  7. [descs addObject:(__bridge id)desc];  
  8. CFRelease(desc);  
  9. __block BOOL errorDuringDownload = NO;  
  10. CTFontDescriptorMatchFontDescriptorsWithProgressHandler( (__bridge CFArrayRef)descs, NULL, ^(CTFontDescriptorMatchingState state, CFDictionaryRef progressParameter) {  
  11. double progressValue = [[(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingPercentage] doubleValue];  
  12. if (state == kCTFontDescriptorMatchingDidBegin) {  
  13. NSLog(@"字型已經匹配");  
  14. elseif (state == kCTFontDescriptorMatchingDidFinish) {  
  15. if (!errorDuringDownload) {  
  16. NSLog(@"字型%@ 下載完成", fontName);  
  17. }  
  18. elseif (state == kCTFontDescriptorMatchingWillBeginDownloading) {  
  19. NSLog(@"字型開始下載");  
  20. elseif (state == kCTFontDescriptorMatchingDidFinishDownloading) {  
  21. NSLog(@"字型下載完成");  
  22. dispatch_async( dispatch_get_main_queue(), ^ {  
  23. // 可以在這裡修改UI控制元件的字型
  24. });  
  25. elseif (state == kCTFontDescriptorMatchingDownloading) {  
  26. NSLog(@"下載進度 %.0f%% ", progressValue);  
  27. elseif (state == kCTFontDescriptorMatchingDidFailWithError) {  
  28. NSError *error = [(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingError];  
  29. if (error != nil) {  
  30. _errorMessage = [error description];  
  31. else {  
  32. _errorMessage = @"ERROR MESSAGE IS NOT AVAILABLE!";  
  33. }  
  34. // 設定標誌
  35. errorDuringDownload = YES;  
  36. NSLog(@"下載錯誤: %@", _errorMessage);  
  37. }  
  38. return (BOOL)YES;  
  39. });  

3、下載完更顯字型UI,如上圖所示!
kCTFontDescriptorMatchingDidFinishDownloading
在該方法中通過GCD (dispatch_async( dispatch_get_main_queue(), ^ {})更顯UI介面,或者通過廣播,KVO等都可以實現整個程式的字型風格的變更;
下載的子相簿存在: ****Simulator/6.0/Library/Assets/com_apple_MobileAsset_Font/

簡單的記錄下:^_^!
  1. <div style="top:655px"><pre name="code"class="java"><pre></pre>  
  2. <pre></pre>  
  3. <div></div>  
  4. <pre></pre>  
  5. </pre></div>  
  6. <!-- Baidu Button BEGIN -->  
  7. <div id="bdshare"class="bdshare_t bds_tools get-codes-bdshare" style="float: right;">  
  8. <a class="bds_qzone" title="分享到QQ空間" href="#"></a>  
  9. <a class="bds_tsina" title="分享到新浪微博" href="#"></a>  
  10. <a class="bds_tqq" title="分享到騰訊微博" href="#"></a>  
  11. <a class="bds_renren" title="分享到人人網" href="#"></a>  
  12. <a class="bds_t163" title="分享到網易微博" href="#"></a>  
  13. <span class="bds_more">更多</span>  
  14. <a class="shareCount" href="#" title="累計分享0次">0</a>  
  15. </div>  
  16. <!-- Baidu Button END -->  
  17. <!--192.168.100.34-->  
  18. <div class="article_next_prev">  
  19.             <li class="prev_article"><span>上一篇:</span><a href="/liaoyp_ios_android/article/details/9333869">MKNetworkKit 詳細介紹</a></li>  
  20.             <li class="next_article"><span>下一篇:</span><a href="/liaoyp_ios_android/article/details/10494873">VVDocumenter - Xcod程式碼註釋工具</a></li>  
  21. </div>  
  22. <!-- Baidu Button BEGIN -->  
  23. <script type="text/javascript" id="bdshare_js" data="type=tools&uid=1536434" src="http://bdimg.share.baidu.com/static/js/bds_s_v2.js?cdnversion=384708"></script>  
  24. <script type="text/javascript">  
  25.     document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000)  
  26. </script>  
  27. <!-- Baidu Button END -->  
  28.         <div id="digg" articleid="10459141">  
  29.             <dl id="btnDigg"class="digg digg_enable">  
  30.                 <dt>頂</dt>  
  31.                 <dd>0</dd>  
  32.             </dl>  
  33.             <dl id="btnBury"class="digg digg_enable">  
  34.                 <dt>踩</dt>  
  35.                 <dd>0</dd>  
  36.             </dl>  
  37.         </div>  

相關推薦

IOS6 _字型下載,輕鬆實現字型主體變換

大家都發現在很多閱讀類APP中都有很多字型風格,如果自己實現比較的麻煩,需要打包字型庫內嵌到專案中,字型庫又大,大多數情況下吃力不討好;如果想做一個個性點APP,想要實現不同風格字型,有沒有的能夠簡單的實現呢? 今天發現蘋果官方的文件顯示IOS6支援應用內字型庫直接動態下載: 蘋果官方動態下載連

python語法_函式

a = filter(函式名,序列) 返回一個迭代器物件/。函式裡必須加過濾條件 ret = ['a','b','c','d','e']def ft(s): if s != 'a': return srat = filter(ft,ret)print(rat)##############

六.Python函式程式設計_函式

Python函式程式設計 #13.函式程式設計 # lambda lambda是對函式的簡寫 #fun=lambda x:2*x+1 #print(fun(20)) #相當於 # def test(x): # return 2*

解決微信遮蔽瀏覽器的下載功能以及如何跳轉到手機預設瀏覽器下載實現

今天一後臺同事問我:為什麼從App裡面分享到微信好友時,在微信裡沒有發下載分享裡的軟體,而在瀏覽器中卻可以?於是我在微信公眾號中試了一下,發現果然不可以下載。通過google 發現,原來是微信遮蔽了內建瀏覽器的下載功能。那麼有沒有解決辦法呢? 肯定是有的。判斷髮現是在微信中開啟,給提示讓其從右上角選擇在瀏覽器

IK動態詞及禁用主詞

/** * 詞典管理類,單子模式 */ public class Dictionary { /* * 詞典單子例項 */ private static Dictionary singleton; /* * 主詞典物件 */ pri

使用Python的turtle畫彩虹

上圖是使用turtle庫繪製的彩虹。程式的關鍵點是將畫筆的顏色漸變,再通過不斷微小的角度轉換繪製成彩虹 計算機中的顏色空間模型是典型的RGB模型,R,G,B分別對應光的三原色,色相是由RGB三個引數共同決定的。 那麼如果想通過一個引數來改變色相,應該使用

github Git 倉庫 下載 上傳 互動使用

#第1步和第2步比較簡單,第3步注重 git pull --rebase origin master 的操作 1、GitHub的註冊 2、git的安裝 3、Git和Github 的互動使用 使用的主要命令: mkdir GIT #在本地建立GIT資料夾 cd GIT

ROS eigen的使用

eigen庫 use it eigen_msg.h 可用於 ros getmetry_msgs的各種訊息與 Eigen訊息的型別轉換 namespace tf { /// Converts a Point message into an Eigen Vecto

C++函式——sort 函式:實現陣列的排序功能

使用該函式,只需引用標頭檔案: #include<algoritnm> 語法描述為:  // 引數begin,end 表示一個範圍,分別為待排序陣列的首地址和尾地址 // 排列的陣列中包括左邊的 begin 但不包括右邊的 end

從Java的物件頭到Java鎖synchronized的底層實現(一)

        就如標題,今天我們的話題會從物件說起。我們知道物件在JVM的記憶體結構中,是存放在堆記憶體中的(new  一個類之後JVM會在堆上為new出的物件申請一塊空間)。在記憶體中,一個Java物件包含三部分:物件頭、例項資料和對齊填充。而物件頭記憶體有的資訊就有ma

IOS字型檢視並獲取字型名稱

1.編寫初衷      由於IOS中字型都是英文名稱,根據設計去去選擇字型的時候,經常只能看到字型名字,不能確定字型名字對應的字型是什麼樣子,所以寫了一個demo。用於檢視IOS系統中目前所有的可用字型,並展示到介面中,點選想要字型的按鈕就彈出字型名字。        2.

【POI】導出excel文件,不生成中間文件,直接將存中的數據創對象下載到瀏覽器

src sheet xssf xls close creat 下載 position new 不是從InputStream中read,然後outputStream再write @RequestMapping("download4Excel") public v

Golang學習筆記(1)

type 學習筆記 res 利用 pos ring 類型 sso 最小 sort庫 利用sort.Sort進行排序須實現如下接口 type Interface interface { // 獲取數據集合元素個數 Len() int

Golang學習筆記(2)-web服務器相關

c中 issue hook col err orm 服務器 srv per package main import ( "net/http" "fmt" "strings" "log" ) func sayHelloName(w htt

利用python下載器-快速分享檔案

一、任務場景: 工作中需要將伺服器上的某些檔案傳給對應的同事,如果臨時去搭建檔案伺服器或者配置,操作起來不太方便 二、比如臨時需要分享/tools這個目錄的檔案,操作方法如下: 1、採用http的方式進行分享 a) python2的版本中 # cd /tools #&nb

『Go 第一季:strconv』

大家好,我叫謝偉,是一名程式設計師。 近期會持續更新內建庫的學習內容,主要的參考文獻是:godoc, 和原始碼 日常編寫程式碼的過程中,字串和數值型、布林型別之間的轉換算是很頻繁了。所以有必要研究下內建的 strconv 庫。 這節的主題是:字串和其他基本資料型別之間的轉換。 除此之外

Urllib:python的http請求

1、四個模組: request error parse robotparser 2、urlopen(url, data, timeout) 傳送請求 get請求無data; post請求有data 3、read() 獲取響應體的內容 4、Handl

『Go 第一季:json』

大家好,我叫謝偉,是一名程式設計師。 近期我會持續更新內建庫的學習筆記,主要參考的是文件 godoc 和 內建庫的原始碼 在日常開發過程中,使用最頻繁的當然是內建庫,無數的開源專案,無不是在內建庫的基礎之上進行衍生、開發,所以其實是有很大的必要進行梳理學習。 本節的主題:內建

『Go 第一季:error』

大家好,我叫謝偉,是一名程式設計師。 近期我會持續更新內建庫的學習筆記,主要參考的是文件 godoc 和 內建庫的原始碼 本節的主題:error Go 中的錯誤處理和別的語言不一樣,設計哲學也不一樣,常有開發者埋怨 Go 語言中的錯誤處理。 本節從內建庫的 error 出發

Scrapy——5 下載中介軟體常用函式、scrapy怎麼對接selenium、常用的Setting設定有哪些

Scrapy——5   下載中介軟體常用的函式 Scrapy怎樣對接selenium 常用的setting內建設定   (Downloader Middleware)下載中介軟體常用函式有哪些  Scrapy怎樣對接Selenium 設定