iOS自定義字型

2022-09-11 05:00:13 字數 2874 閱讀 9586

從本地讀取字型 並註冊 

讀取方法一 :

+(instancetype)customfont:(cgfloat)fontsize

cferrorref error;

cgdataproviderref providerref =cgdataprovidercreatewithcfdata((__bridge cfdataref)dynamicfontdata);

cgfontref newfont =cgfontcreatewithdataprovider(providerref);

cfstringref fontname =cgfontcopyfullname(newfont);

nsstring *fontnamestring = (__bridge id

)(fontname);

if ( ![self isresisted:fontnamestring] && ! ctfontmanagerregistergraphicsfont(newfont, &error))

cfrelease(newfont);

cfrelease(providerref);

cfrelease(fontname);

uifont *fone =[uifont fontwithname:fontnamestring size:fontsize];

if (!fone)

return

fone;

}

讀取方法二 (參考 :

nsstring *fontpath =[[nsbundle mainbundle] pathforresource:fontfilenamearray[i] oftype:nil];  

nsurl *url =[nsurl fileurlwithpath:fontpath];

cgdataproviderref fontdataprovider =cgdataprovidercreatewithurl((__bridge cfurlref)url);

if (fontdataprovider ==null)

cgfontref newfont =cgfontcreatewithdataprovider(fontdataprovider);

cgdataproviderrelease(fontdataprovider);

if (newfont ==null)

cfstringref fontname =cgfontcopyfullname(newfont);

nsstring *fontnamestring = (__bridge id

)(fontname);

if ([fontnamestring isequaltostring:@"

yuppy sc regular

"])

[fontnamemdic setobject:fontnamestring forkey:fontfilenamearray[i]];

cfrelease(fontname);

cgfontrelease(newfont);

-(uifont*)customfontwithpath:(nsstring*)path size:(cgfloat)size

以上三種方法可以讀取ttf,otf 格式字型,但是方法

一、二發現有時會有讀取不到的情況,讀取不到的原因是fontnamestring 獲取錯誤,方法一有時獲取到的fontnamestring是yuppy sc regular 但是實際的fontnamestring  是 yuppysc-regular,方法二的缺點是要事先知道fontnamestring。方法三還沒有發現讀取不到的情況。

方法一、二獲取字型名的方法是:cgfontcopyfullname 方法三取字型名的方法是

cgfontcopypostscriptname,方法一 二獲取的fullname,ios用的是postscriptname

ttc字型的讀取方法(見

-(nsarray*)customfontarraywithpath:(nsstring*)path size:(cgfloat)size

return

customfontarray;

}

以下內容摘自(

不過這個方法只支援7.0以上,暫時在7.0以下沒有找到方法。

個人看法,因為ttc裡面的字型都比較相似,所以其實使用乙個也足以。

附:(字型的介紹)

ttc字型是truetype字型整合檔案(. ttc檔案),是在一單獨檔案結構中包含多種字型,以便更有效地共享輪廓資料,當多種字型共享同一筆畫時,ttc技術可有效地減小字型檔案的大小。

ttc是幾個ttf合成的字型檔,安裝後字型列表中會看到兩個以上的字型。兩個字型中大部分字都一樣時,可以將兩種字型做成乙個ttc檔案,常見的ttc字型,因為共享筆劃資料,所以大多這個集合中的字型區別只是字元寬度不一樣,以便適應不同的版面排版要求。

而ttf字型則只包含一種字型。

以下內容摘自(

不過這個方法只支援7.0以上,暫時在7.0以下沒有找到方法。

個人看法,因為ttc裡面的字型都比較相似,所以其實使用乙個也足以。

附:(字型的介紹)

ttc字型是truetype字型整合檔案(. ttc檔案),是在一單獨檔案結構中包含多種字型,以便更有效地共享輪廓資料,當多種字型共享同一筆畫時,ttc技術可有效地減小字型檔案的大小。

ttc是幾個ttf合成的字型檔,安裝後字型列表中會看到兩個以上的字型。兩個字型中大部分字都一樣時,可以將兩種字型做成乙個ttc檔案,常見的ttc字型,因為共享筆劃資料,所以大多這個集合中的字型區別只是字元寬度不一樣,以便適應不同的版面排版要求。

而ttf字型則只包含一種字型。

ios自定義字型

提供字型檔案路徑,返回所需要字型 複製 uifont customfontwithpath nsstring path size cgfloat size 這樣就不需要在plist設定任何東西,只需要得到字型庫檔案的路徑,就可以取出對應的字型。上面的方法對於ttf otf的字型都有效,但是對於ttc...

iOS自定義字型

ios載入自定義的字型需要點活兒 xcode自帶字型樣式查詢 info.plist配置 2.前往targets build phases copy bundle resources中新增字型檔案 copy bundle resources配置 3.通過眼力找到字型檔案對應的fontname,暫未有更...

iOS使用自定義字型

要新增方正蘭亭字型,首先需要乙個ttf的字型庫。然後把這個檔案新增到工程裡面 在plist裡面新增 新增成功後,就可以使用啦。但是我只拿到這個庫,並不清楚fontname。用下面這段 列印出來系統可用字型。nsarray familynames nsarrayalloc initwitharray ...