2016-01-04 11 views
10

私はそれが可能であるかどうか、また私の質問のための解決策を見つけようとしましたが、成功しなかったことを正確には考えていません。私はここで尋ねており、私は解決策を得ることを願っています。UIFontまたは.ttfファイルからフォントの各文字を取得する

.ttfファイルまたはUIFontで提供される各フォントの形状を取得したい1つの描画関連アプリケーションを開発しています。

Ex。私は、このような"OpenSans-Italic"ようUIFont/.TTFファイルを持っている場合、それは(ここでは「斜体」形状)"OpenSans"フォントのを図形ので

は、その後どのように各「文字」を得ることができますか? と私はChar or NSString.

=>でこれにしたい@ [、 "A" @ "C" @ "B"、@、@ "D"、.. "B" @ "A"、@ 、 "C"、 "D"、..... @ "1"、 "2"、 "3" ....]; //これは、目的を理解するためだけのchar配列です。

私はこれを取得することができますどのように、私を提案してください?

+0

各文字を[属性付き文字列](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSAttributedString_Class/)またはイメージとして使用しますか? – ColGraff

+0

@KennethBrunoイメージではありません各文字列を文字列として入力します。 – iPatel

+0

多分これは助けになる:http://stackoverflow.com/a/6991793/2754158フォント文字セットを取得するコードのように見えます。 – Krzysztof

答えて

3

ここにはthisの投稿から借りる方法があります。 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])) 
    } 
    } 
} 
+0

答えをくれてありがとう、Objective-Cでこのコードを変換してください。 – iPatel

+1

@iPatelあなたの質問にはあなたが使用している言語としてSwiftが記載されています。私が投稿したリンクに行くと、答えの1つに似たObjective-Cコードがあります。 – ColGraff

0

利用可能なグリフがコードでリストされていれば動作しますか?それがうまくいけば、すべてが簡単に見えます。

私は、フォントファイルを解析するビルドフェーズをいくつか追加し、利用可能なすべての文字を含むいくつかのコードを生成することを意味します。私は同様のアイデアIconFontを提供したプロジェクトを作成しました。このプロジェクトは、フォントファイルからUIImageを提供します。開発ブランチでは、プロジェクトPyTTFを使用してttfフォントファイルを解析し、TBCityIcon.mにコードを追加するビルドフェーズを追加します。すべての使用可能な文字を含むNSArrayのコードを生成するためにPythonスクリプトを変更するのは簡単です。

関連する問題