Swift 4 solution by extension:
extension UIFont {
/**
Une fonction pratique pour créer une police personnalisée avec des données téléchargées.
- Parameter data: Les données locales du fichier de police.
- Parameter size: Taille souhaitée de la police personnalisée.
- Returns: Une police personnalisée à partir des données. `nil` en cas d'échec.
*/
class func font(withData data: Data, size: CGFloat) -> UIFont? {
// Convertir les données en NSData pour une conversion pratique.
let nsData = NSData(data: data)
// Convertir en CFData et préparer le fournisseur de données.
guard let cfData = CFDataCreate(kCFAllocatorDefault, nsData.bytes.assumingMemoryBound(to: UInt8.self), nsData.length),
let dataProvider = CGDataProvider(data: cfData),
let cgFont = CGFont(dataProvider) else {
print("Échec de la conversion des données en CGFont.")
return nil
}
// Enregistrer la police et créer UIFont.
var error: Unmanaged?
CTFontManagerRegisterGraphicsFont(cgFont, &error)
if let fontName = cgFont.postScriptName,
let customFont = UIFont(name: String(fontName), size: size) {
return customFont
} else {
print("Erreur lors du chargement de la police avec l'erreur: \(String(describing: error))")
return nil
}
}
}
Usage:
let customFont = UIFont.font(withData: data, size: 15.0)