0

実行時にカスタム フォントを IOS アプリに追加し、編集可能なテキストエリアまたは contentEditable="on" を指定した UIWebView で使用したいと考えています。

コンパイル時にカスタム フォントをバンドルする方法は知っていますが、実行時にこれを行う必要があります。

これらの代替手段のいずれかが可能ですか:

  • インターネット経由でフォントをダウンロードし、アプリのドキュメント フォルダーに保存しますか?
  • http アドレスを使用して外部フォントを参照しますか?
  • iTunes経由でフォントを転送しますか?

iOS6 では、ラベルとリッチ テキスト編集に多くの改良が加えられており、カスタム フォントのサポートも同様に改良されていることを期待していました。

4

1 に答える 1

1

私自身の質問に答えます。

plistファイルにフォントを登録せずに、iOSのネイティブテキストエリアでこれを行う方法が見つかりませんでした。

ただし、UIWebView は @font-face 宣言と .ttf ファイルをサポートしています。秘訣は、Documents フォルダーに保存されているフォントを指す NSURL を作成し、[webView stringByEvaluatingJavaScriptFromString] を使用して、これを使用するよう Web ビューに指示することです。

私の最初のテストでは、次のようなことをしました:

私のビューコントローラ:

- (NSString *)documentsDirectory {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask, YES);
    return [paths objectAtIndex:0];
}

- (void) setFont {
    NSString *urlPath = [[self documentsDirectory]
                         stringByAppendingPathComponent:@"myfont.ttf"];
    NSURL *url = [NSURL fileURLWithPath:urlPath];
    [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setFont('%@');", url]];
}

私のウェブページで:

<style>       
    body {
        font-family: customfont;
        font-size: 40px;
    }        
</style>
<script>
    function setFont(font) {
        var id = 'customfont',
            head = document.getElementsByTagName("head")[0],
        style;

        style = document.getElementById(id);
        if(style) {
            head.removeChild(style);
        }

        style = document.createElement("style");
        style.setAttribute("id", id);
        style.textContent = "@font-face { font-family: '" + id + "'; src: url('" + font + "'); font-weight: normal; font-style: normal; }"
        head.appendChild(style);
    }
</script>
于 2012-10-29T14:18:43.453 に答える