Получите каждый char (с формой) шрифта из файла UIFont или .ttf

У меня нет точной идеи, потому что это возможно или нет, и я попытался найти решение для моего вопроса, но не добился успеха, поэтому я спрашиваю здесь и надеюсь, что я получу решение.

Я разрабатываю одно приложение, связанное с рисунком, в котором я хочу получить форму каждого шрифта, предоставленного .ttf файлом или UIFont.

Для примера

Если у меня есть файл UIFont/.ttf, например "OpenSans-Italic", то как получить каждый "char" с помощью формы (здесь "курсив" ) шрифта "OpenSans"? И я хочу это в Char or NSString.

= > @[@ "a", @ "b", @ "c", @ "d",.. @ "A", @ "B", @ "C", @ "D"..... @ "1", @ "2", @ "3"....];//Это массив char только для понимания цели.

Пожалуйста, предложите мне, как я могу это получить?

Ответ 1

Вот способ сделать это, заимствуя из этого сообщение. Он выполняет итерацию всех возможных символов в NSCharacterSet и находит те, которые являются действительными. Прямо сейчас, используя .URLPathAllowedCharacterSet(), но он может использовать другие.

import UIKit

var attributedString = NSMutableAttributedString()
if let font = UIFont(name: "OpenSans-Italic", size: 12) {
  let charset = NSCharacterSet.URLPathAllowedCharacterSet()
  for var plane : UInt32 in 0...16 where charset.hasMemberInPlane(UInt8(plane)) {
    let planeRange = (plane << 16)..<((plane+1) << 16)
    for characterValue in planeRange where charset.longCharacterIsMember(characterValue) {
      let character = String(UnicodeScalar(CFSwapInt32HostToLittle(characterValue)))
      attributedString.appendAttributedString(NSAttributedString(string:character, attributes: [NSFontAttributeName:font]))
    }
  }
}

Ответ 2

Работает ли, если доступные символы отображаются в коде? Если это работает, все кажется легким.

Я имею в виду добавить некоторую фазу сборки для разбора файла шрифта и генерировать некоторый код, включая все доступные символы. Я создал проект, который предоставил аналогичную идею IconFont. Этот проект предоставляет UIImage из файла шрифта. В ветке разработки я добавляю фазу сборки для разбора файла шрифта ttf с помощью проекта PyTTF и добавьте код в TBCityIcon.m. Легко модифицировать python script для генерации кода NSArray, который содержит все доступные символы.