7

主にアラビア語のコンテンツを表示する iphone アプリケーションを作成しようとしています。そのコンテンツを表示するために、iPhone のデフォルトのアラビア語フォントではなく、カスタムのアラビア語フォントを使用したいと考えています。次のコードを使用しました。

- (void)viewDidLoad {
    [super viewDidLoad];
    [arabicLabel setFont: [UIFont fontWithName: @"Simple Indust Shaded" size: 20]];
    arabicLabel.text = @"السلام عليكم";
}

ここで、arabicLabel は IBOutlet UILabel です。App リソースにラベルを配置し、それを UIAppFont 配列項目として info.plist ファイルに追加します。また、フォントはUnicodeです。

このコードをシミュレーターで実行すると、ラベルにデフォルトのアラビア語フォントが表示されました (カスタム フォントではありません)。ただし、コードに記載されているように、サイズを 20 に設定しています。

ここで何が間違っていたのかわかりません... info.plist ファイルに拡張子 (ttf) 付きのフォント ファイル名を追加する必要があることはわかっています。また、前のコードではファイル名ではなく実際のフォント名を入力する必要があったため、Mac でファイルを開き、ファイルを開いたときに表示されるタイトル (Simple Indust Shaded) を使用しました。

何か不足していますか?Unicode であること以外に、カスタム フォントに関する追加の要件はありますか?

NB: カスタム英語フォントに対して同じ手順を実行したところ、うまくいきました!...

4

2 に答える 2

10

簡潔な答え

これはiOSのバグのようです。

長い答え

ご存知かもしれませんが、アラビア語のテキストはレンダリングする前に整形する必要があります。つまり、基本的な文字 ( Unicode:0600-06FF ) を適切な対応する文脈上の文字 ( Unicode:FE70-FEFF ) に変換する必要があります。

iOS はアラビア語のテキストに対してこの前処理を自動的に行いますが、何らかの理由でカスタム フォントを忘れて、接続された文字をレンダリングするときにシステムの既定のフォントを使用するだけです。

つまり、これは iOS のバグであり、解決されるまで待つ必要があります。

回避策

ただし、待てない場合は、次の回避策を使用できます 。テキストをレンダリングする前に手動で前処理を行います。これにより、この問題の原因となる iOS の前処理フェーズをスキップできるため、カスタム フォントを使用してテキストをレンダリングできます。

このソリューションをテストする場合は、次の行をコピーしてプロジェクトで試してください。

arabicLabel.text = @"ﺍﻟﺴﻼﻡ ﻋﻠﻴﻜﻢ";
于 2010-12-05T22:26:28.323 に答える
2

この回答は、IOS 7 より前のものです。

私もこの状況を経験しました.0600-06ff文字をカスタムフォントに置き換えるための独自のハッシュマップメソッドを作成できますが、そのためには、TTFのグリフが0600-06FFに対してマップされているかどうかを確認する必要があります. 0600-06ff 以外の ur グリフ マップされた Unicode を変更します

たとえば、TTF を作成し、Unicode 0627 で 'æ' をマッピングし、型指定された Unicode 0627 char の効果を確認しようとすると ('ا' と入力すると、'و' が表示される必要があります)、カスタム イメージは適用されません。 ios6 では、特定の範囲のグリフを変更できないためです。しかし、このカスタム char を Fxxx シリーズまたは 0600-06ff 以外にマップした場合、カスタム変更を簡単に行うことができます。

アラビア語 (0600—06FF、255 文字) この範囲で再生したり、カスタム イメージでこれらのグリフ イメージのイメージを変更することはできないため、以下のアラビア語 Unicode に対してグリフをマッピングします。 アラビア語補足 (0750—077F、48 文字) アラビア語拡張 A (08A0—08FF、39 文字) アラビア語表示形式-A (FB50—FDFF、608 文字) アラビア語表示形式-B (FE70—FEFF、140 文字)

これは、カスタムアラビア語クラスを使用して行われた同様のタイプのリンクであり、 アラビア語カスタムフォントクラスからも助けられました

于 2014-01-13T15:01:59.613 に答える