2016-11-09 81 views

回答

0

是的。這絕對有可能。你需要看看CTFontManagerRegisterGraphicsFont

下面是一個使用示例:

NSData *inData = /* your decrypted font-file data */; 
CFErrorRef error; 
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData); 
CGFontRef font = CGFontCreateWithDataProvider(provider); 
if (! CTFontManagerRegisterGraphicsFont(font, &error)) { 
    CFStringRef errorDescription = CFErrorCopyDescription(error) 
    NSLog(@"Failed to load font: %@", errorDescription); 
    CFRelease(errorDescription); 
} 
CFRelease(font); 
CFRelease(provider); 

斯威夫特版本:

func loadFont(_ name: String) -> Bool { 
    let bundle = Bundle(for: self) 
    guard let fontPath = bundle.path(forResource: name, ofType: "ttf"), 
     let data = try? Data(contentsOf: URL(fileURLWithPath: fontPath)), 
     let provider = CGDataProvider(data: data as CFData) 
    else { 
     return false 
    } 

    let font = CGFont(provider) 
    var error: Unmanaged<CFError>? 

    let success = CTFontManagerRegisterGraphicsFont(font, &error) 
    if !success { 
     print("Error loading font. Font is possibly already registered.") 
     return false 
    } 

    return true 
} 

https://marco.org/2012/12/21/ios-dynamic-font-loading