Как использовать динамические шрифты из локального каталога в виджетах iOS?IOS

Программируем под IOS
Ответить
Anonymous
 Как использовать динамические шрифты из локального каталога в виджетах iOS?

Сообщение Anonymous »

В настоящее время я работаю над приложением для iOS, в котором зарегистрировал пользовательские шрифты из локального каталога с помощью CoreText в основном приложении. Теперь я хочу использовать эти же пользовательские шрифты в расширении виджета, но не уверен, нужно ли мне снова регистрировать их для виджета или их можно использовать повторно.
Вот упрощенный вариант версия моего текущего класса FontManager, который загружает и регистрирует шрифты из локального каталога приложения:

Код: Выделить всё

import Foundation
import CoreText
import CoreGraphics
import os.log

final class FontManager {
static let shared = FontManager()
private var registeredFonts: Set = []
private let logger = Logger(subsystem: "com.yourapp.FontManager", category: "FontManager")

private init() {
preloadRegisteredFonts()
}

func loadFont(from url: URL) -> Result {
guard url.isFileURL else {
logger.error("Invalid local URL: \(url.absoluteString)")
return .failure(.invalidLocalURL)
}

do {
let fontData = try Data(contentsOf: url)
if let postScriptName = registerFont(with: fontData) {
return .success(postScriptName)
} else {
return .failure(.fontRegistrationFailed)
}
} catch {
logger.error("Failed to read font data: \(error.localizedDescription)")
return .failure(.dataReadFailed)
}
}

private func registerFont(with fontData: Data) -> String? {
guard let dataProvider = CGDataProvider(data: fontData as CFData),
let cgFont = CGFont(dataProvider),
let postScriptName = cgFont.postScriptName as String? else {
logger.error("Failed to create CGFont")
return nil
}

if registeredFonts.contains(postScriptName) {
logger.info("Font already registered: \(postScriptName)")
return postScriptName
}

var error: Unmanaged?
if CTFontManagerRegisterGraphicsFont(cgFont, &error) {
registeredFonts.insert(postScriptName)
logger.info("Successfully registered font: \(postScriptName)")
return postScriptName
} else {
logger.error("Failed to register font: \(postScriptName)")
return nil
}
}

private func preloadRegisteredFonts() {
if let availableFonts = CTFontManagerCopyAvailablePostScriptNames() as? [String] {
registeredFonts = Set(availableFonts)
}
}
}
Мои вопросы:
  • Нужно ли регистрировать шрифты отдельно для виджета или можно повторно использовать шрифты, зарегистрированные в основном приложении?
  • Если мне также нужно зарегистрировать шрифты для виджета, где мне следует это сделать в жизненном цикле виджета?
    < li>Есть ли какие-либо особые соображения или ограничения при использовании пользовательских шрифтов, расположенных в локальном каталоге приложения, в виджетах?
Любые рекомендации или рекомендации по работе с пользовательскими шрифтами в виджетах был бы очень признателен!
Я надеялся, что шрифты, зарегистрированные в основном приложении, будут автоматически доступны в виджете без необходимости их повторной регистрации. Если это невозможно, я ожидал, что в жизненном цикле виджета будет метод или место для динамической регистрации этих шрифтов.
Я ищу наиболее эффективный способ обработки локальных пользовательских шрифтов. шрифты в расширении виджета.

Подробнее здесь: https://stackoverflow.com/questions/789 ... os-widgets
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»