2011-08-02 5 views
6

私のiPhoneアプリケーションで分数を "うまく表示"しようとしています。これまで、私は軽度の部分のハードコードされたUnicode文字につながる退屈なswitch文を使用していましたが、私が正しく理解しているならば、次のような文字列を作成できるということを意味するUnicode小数点以下のスラッシュ文字について学びました:ユニコードを使用した分数のNSString表現

[NSString stringWithFormat:@"%i\u2044%i",numerator,denominator]; 

「レンダラー」は、自動的に、より小さくて、上下付きの分子と下付きの分母で印刷します。しかし、上記のコードは私に標準の1/2の外観を与えます。 drawAtPointを使用して文字列を画面に配置しています。私はdecomposedStringUsingCanonicalMappingとprecomposedStringUsingCanonicalMappingを実験しましたが、正直なところドキュメントが失われました。

これが機能しているか、NSStringの描画がこれに対処できませんか?

答えて

1

私は、ユニコード文字があなたが記述するプロパティを持つ方法は知らない。 AFAIKは、U + 2044を通常のスラッシュと区別する唯一のことは、少し角度があり、両側に少ししかないスペースがあることで、周囲の数字に非常に近くなるようにすることです。

Here's a page HTMLでフラクションスラッシュを使用しています。ご覧のとおり、自分で試してみると、「1/10」のようなものが得られます。周囲の数字のHTMLに<sup>タグと<sub>タグを使用して適切な表示を得ることでこれを補う。

これをNSStringで動作させるには、周囲の数字にスーパースクリプトやサブスクリプトを適用する方法を見つけなければなりません。

+0

私は私はそれがうまくいくことを願っていました[ウィキペディア](http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters)の「フラクションスラッシュ」セクションから働いていました。 – jrturton

+1

少なくともデスクトップでは、Cocoaのテキストレンダリングシステムは、フォントで提供される情報を部分的に合成するように見えますが、フォント自体がサポートしていない場合は分数を合成しません。たとえば、Apple Chanceryを使用して1/2を入力すると、実際の部分として表示されますが、Helveticaでは表示されません。私はCocoa Touchのテキストレンダリングシステムがこれをまったくサポートしているかどうかはわかりません。 –

+0

NSAttributedStringに 'sub'と' sup'を設定できます。 – Sulthan

0

いくつかのUnicode文字が含まれていますが、これは実際の小数点の外観になりますが、1/2,1/3,1/4に制限されています。

これを任意の分数にしたい場合は、適切な外観を描画するカスタムビューが必要なように思えます。位置付けされたサブビューを使用するか、drawRect:を使用します。

2

私はちょうどレシピがUnicodeの下品な部分に変換されるための単純な分数がほしいと思った。

CGFloat quantityValue = 0.25f; 
NSString *quantity = nil; 
if (quantityValue == 0.25f) { 
    // 1/4 
    const unichar quarter = 0xbc; 
    quantity = [NSString stringWithCharacters:&quarter length:1]; 
} else if (quantityValue == 0.33f) { 
    // 1/3 
    const unichar third = 0x2153; 
    quantity = [NSString stringWithCharacters:&third length:1]; 
} else if (quantityValue == 0.5f) { 
    // 1/2 
    const unichar half = 0xbd; 
    quantity = [NSString stringWithCharacters:&half length:1]; 
} else if (quantityValue == 0.66f) { 
    // 2/3 
    const unichar twoThirds = 0x2154; 
    quantity = [NSString stringWithCharacters:&twoThirds length:1]; 
} else if (quantityValue == 0.75f) { 
    // 3/4 
    const unichar threeQuarters = 0xbe; 
    quantity = [NSString stringWithCharacters:&threeQuarters length:1]; 
} 
NSLog(@"%@", quantity); 
+0

浮動小数点の丸め誤差のために、多くの "ミス"が発生します。 *イプシロン*値との比較を実行する必要があります。 – Droppy

+0

これは優れた点です。私は、より具体的には、Unicode部分の表示を示していましたが、丸め誤差が問題になります。 –

0

を、私は、これは長い時間前だったけど、それは場合に役立ちます、あなたが任意の分画を表示するために使用できるすべての小数のために上付きUnicode文字があります。ここでは

は、あなたがそれを行うことができる方法でありますほとんどのフォント。ここで同様の質問に答えを参照してください - https://stackoverflow.com/a/30860163/4522315

編集:コメントを1として

、この解決策は、あなたが使用しているフォントに依存します。 Amsi Pro(左)と他の商用フォントは、上付き文字に必要なすべての記号を含む傾向がありますが、システムフォント(右)は含みません。

Nice font System font

+0

それは本当ですが、多くの場合、ひどく見えます。http://stackoverflow.com/q/7663251 – jrturton

+0

@jrturton Ah。私は出版社のフォントを使ってテストしていました。しかし、システムのフォントはうまくいくはずですね。 –

+0

あなたはそうだと思いますが、前回チェックしたのではありません – jrturton

関連する問題