Я пытаюсь выполнить глифы с фронта SF Symbol, используя приведенный ниже пример кода, предоставленный извлечением https://github.com/davedelong/sfsymbols. Я выделил код, который не могу использовать для работы со значениями, извлеченными из времени выполнения.
Я сократил код до тех утверждений, которые необходимы для решения проблемы.
Похоже, что эта проблема является именем, которое я предоставляю последнему утверждению в CTFontGetGlyphWithName. Каждая комбинация значений, которые я попытался, возвращает 0.
Обратите внимание, что у вас должно быть приложение SF Symbolsустановлен для получения исходного пакета.
Прошу прощения за качество кода, это всего лишь для создания кратчайшего возможного примера кода для воспроизведения проблемы.
спасибо.
Я выполнил довольно много обучающих упражнений, но, похоже, практических примеров этих более продвинутых функций не так много.
public class StackOverflow {
public func Test() {
let maybeCFURLs = LSCopyApplicationURLsForBundleIdentifier("com.apple.SFSymbols" as CFString, nil)?.takeRetainedValue()
let cfURLs = maybeCFURLs as? Array<URL>
let fontFile = cfURLs!.compactMap { url -> URL? in
guard let appBundle = Bundle(url: url) else { return nil }
return appBundle.url(forResource: "SFSymbolsFallback", withExtension: "ttf")
}
let attributes = [
kCTFontTraitsAttribute: [
kCTFontWeightTrait: NSFont.Weight.regular.rawValue
]
]
let provider = CGDataProvider(url: fontFile.first! as CFURL)
let cgFont = CGFont(provider!)
let ctAttributes = CTFontDescriptorCreateWithAttributes(attributes as CFDictionary)
let font = CTFontCreateWithGraphicsFont(cgFont!, 32, nil, ctAttributes)
// let name = "uni.plus.square.fill.medium" as CFString - Does not work
//var name = "square.fill.medium" as CFString - Does not work
let glyphName = "plus.square.fill.medium" as CFString
var glyph = CTFontGetGlyphWithName(font, glyphName )
}
}