標籤:des android blog io os 使用 strong 檔案 div
IOS運行時動態註冊字型
在IOS開發中,使用第三方字型,如ttf檔案,otf檔案,是很簡單的。只需要兩個步驟。1,講 ttf檔案,otf檔案添加到工程根目錄中。2,在info.plist中增加字型檔,是字型檔名。在使用時,雙擊開啟字型檔,標題會顯示字型名稱,使用那個自體名稱(setFontName)即可。在android中,是把字型檔拷貝到asset目錄中,再使用typeface類根據檔案得到其執行個體。
現在的問題是,在我們玩圖的開發中,由於中文字型過大,需要從線上下載,下載到本地使用,這就涉及到一個註冊字型問題。IOS應用程學在啟動時,會自動讀取info.plist檔案,如果在在目前的目錄找到對應的字型檔,就會向系統註冊這個字型,然後才能根據字型名稱使用。所以在字型線上下載這個功能中,提前在infp.plist中註冊字型是不可行的,那就要動態註冊字型了,就是運行時下載字型ttf檔案,下載到documents目錄中,然後根據字型檔全檔案名稱(ttfFileName)去註冊。下面是關鍵的代碼。、
NSURL *url = [NSURL fileURLWithPath:ttfFileName];
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);
if (fontDataProvider == NULL)
return ttfFileName;
CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
CFErrorRef error;
if(!CTFontManagerRegisterGraphicsFont(newFont, &error)){
CFStringRef errorDescription = CFErrorCopyDescription(error);
NSLog(@"Failed to load font: %@", errorDescription);
CFRelease(errorDescription);
}
CFRelease(newFont);
CFRelease(fontDataProvider);
這就是根據字型檔的全檔案名稱動態註冊的代碼。android就不存在註冊不註冊的問題,因為它本來就是根據字型檔全檔案名稱來省城typeface執行個體的。
IOS運行時動態註冊字型