2017-01-11 15 views
3

から利用可能なすべての文字を取得します。私はすべての利用可能なフォントを一覧表示しています(システムが提供される)が、私はあまりにも彼らのために利用可能なすべての文字を一覧表示したいと思います。例えば私はこのアプリではスウィフト3 でiOSアプリを開発していたフォント

私はに素晴らしいフォントを使用していると私は、ユーザーがリストから文字/記号のいずれかを選択できるようにしたいです。これどうやってするの?

これは私がフォントの配列を取得する方法です。選択したフォントのすべての文字の配列を取得するにはどうすればよいですか?

UIFont.familyNames.map({ UIFont.fontNames(forFamilyName: $0)}).reduce([]) { $0 + $1 } 

答えて

3

、あなたはそのフォントの文字セットを取得する必要があります。たとえば、私は最初のUIFontを取る。

let firsttFont = UIFont.familyNames.first 

let first = UIFont(name: firsttFont!, size: 14) 
let fontDescriptor = first!.fontDescriptor 
let characterSet : NSCharacterSet = fontDescriptor.object(forKey: UIFontDescriptorCharacterSetAttribute) as! NSCharacterSet 

すると、そのNSCharacterSetのすべての文字を取得するには、この拡張機能を使用します。

extension NSCharacterSet { 
    var characters:[String] { 
     var chars = [String]() 
     for plane:UInt8 in 0...16 { 
      if self.hasMemberInPlane(plane) { 
       let p0 = UInt32(plane) << 16 
       let p1 = (UInt32(plane) + 1) << 16 
       for c:UTF32Char in p0..<p1 { 
        if self.longCharacterIsMember(c) { 
         var c1 = c.littleEndian 
         let s = NSString(bytes: &c1, length: 4, encoding: String.Encoding.utf32LittleEndian.rawValue)! 
         chars.append(String(s)) 
        } 
       } 
      } 
     } 
     return chars 
    } 
} 

(参考:NSArray from NSCharacterset

だから、最後に、ちょうどすべての文字(中を取得するためにcharacterSet.charactersを呼び出します文字列)

+0

他のソースのコードを使用している場合は、オリジナルへのリンクを追加してください。あなたの拡張メソッドは、http://stackoverflow.com/a/34772440/1187415の逐語的なコピーであるように見えます。これは、http://stackoverflow.com/a/15742659/1187415に基づいています。 –

+0

はい、この拡張機能のオリジナルを追加しました。 –

0

私はあなたが多くのコーディングをすることなくできるとは思わない。 Appleのドキュメントへのリンクは次のとおりです。

main font pageには、ドキュメントのリストを表示するために少し下にスクロールする必要がありますが、リストにはTrueType reference manualがあります。文字はグリフとして格納されます。つまり、クリーンなフォントサイズを許可するためにベクトルベースです。 (私は、IBのフォントサイズの単純なドロップダウンは単に「提案」に過ぎず、気になるサイズを入力することができます)。

この2番目のリンクでは、フォントテーブルの長いリストまでスクロールします。 1つは有望に見える - cmap table。しかし、これを読んで、(a)「ウムラウトA」や中国語のような外国の文字を持ち、(b)各フォントで文字を省略することが可能です。また、これはルックアップテーブルです。グリフの位置を取得するためにマッピングテーブルを使用する必要があるかもしれません。

あなたは英語のみをターゲットにしている場合は、「AA」の文字がフォントのために存在するかどうかを確認し、それらを表示する方法を見つける方が良いかもしれません。各UIFontに対して

関連する問題