
CGFontCreateWithDataProviderで固まるバグの対処方法(objective-c)
こんにちは♪
最近は寝てる時間以外の90%近くをパソコンの
画面を見て過ごしているあっきぃさんもといひっきぃさんです。よろぴこっ♪
iPhoneアプリの話なんですが、
フォントファイルってあるじゃないですか。
hogehoge.otfとかmukimuki.ttfとかとかとか。
アプリによっては
色々なフォントが使えるとかわいいですよね。
しかしフォントファイルは思いのほか重いのです。
きゃぁー、これもかわいいー
おお、これなんかカッコいいなー
なぁんてほいほいXcodeちゃんに組み込んでいったらあっという間に50MB超えてしまう…
(50MBを超えるとユーザーはwifi環境でないとインストール出来なくなってしまう。
そこでフォントファイルをダウンロードして読み込めばいいのだっ
ってな発想になるわけですね♪
ダウンロードしたフォントファイルを
ドキュメント下とかに置いといて、#import <CoreText/CoreText.h>して
//pathはダウンロードしたフォントファイルまでのpath
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];
@try {
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if(!CTFontManagerRegisterGraphicsFont(font, &error;)){
CFStringRef errorDescription = CFErrorCopyDescription(error);
CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);
}
@catch (NSException *exception) {
NSLog(@”このフォントはもう…もう…”);
}
的な感じで読み込みが出来るわけでーす♪
なるほどふふふーん♪
じゃぁこれをAppDelegateとかで起動時に走らせればいいかなー
と思ったのですが、何故か固まるという…
なぜ…
なぜなの…?!
落ちるとかではなく完全なるフリーズ
ダウンロードしたフォントファイルが壊れているのかっ。
日頃の行いが悪いのかっ。とかなんとか思ったんですが違うみたい。
解決方法としては読み込む前に一行足すだけ。
[UIFont systemFontOfSize:10];
読み込む前に一度でもUIFont系を実行しないとだめみたい。
UIFont系を呼び出した時に始めてXcodeに組み込んであるフォントファイルとかも読み込むようで、そこらへんと関係してる気がする。
はまっている方に参考になればと♪
ではでは♪