8

Xcodeのinfo.plistファイルの「アプリケーションが提供するフォント」キーからカスタムフォントのリストを取得する方法を知っている人はいますか? ありがとう

4

2 に答える 2

8

次のコードは、Info.plist からカスタム フォント ファイルのリストを読み取り、フォント ファイルから完全なフォント名を抽出します。(コードの一部はhttps://stackoverflow.com/a/17519740/1187415からコピーされ 、小さな変更と ARC 調整が加えられています)。

Objective-C

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSArray* fontFiles = [infoDict objectForKey:@"UIAppFonts"];

for (NSString *fontFile in fontFiles) {
    NSLog(@"file name: %@", fontFile);
    NSURL *url = [[NSBundle mainBundle] URLForResource:fontFile withExtension:NULL];
    NSData *fontData = [NSData dataWithContentsOfURL:url];
    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)fontData);
    CGFontRef loadedFont = CGFontCreateWithDataProvider(fontDataProvider);
    NSString *fullName = CFBridgingRelease(CGFontCopyFullName(loadedFont));
    CGFontRelease(loadedFont);
    CGDataProviderRelease(fontDataProvider);
    NSLog(@"font name: %@", fullName);
}

Swift 3 相当:

if let infoDict = Bundle.main.infoDictionary,
    let fontFiles = infoDict["UIAppFonts"] as? [String] {
    for fontFile in fontFiles {
        print("file name", fontFile)
        if let url = Bundle.main.url(forResource: fontFile, withExtension: nil),
            let fontData = NSData(contentsOf: url), 
            let fontDataProvider = CGDataProvider(data: fontData) {
            let loadedFont = CGFont(fontDataProvider)
            if let fullName = loadedFont.fullName {
                print("font name", fullName)
            }
        }
    }
}
于 2013-08-18T14:46:18.243 に答える