使用unicode的分数的NSString表示

时间:2011-08-02 20:56:56

标签: iphone objective-c ios cocoa-touch nsstring

我正试图在我的iPhone应用程序中“很好地”显示分数。以前我一直使用繁琐的switch语句导致粗俗的unicode字符为粗俗的分数,但我已经了解了unicode分数斜杠字符,如果我正确理解它,应该意味着我可以创建一个字符串如下: / p>

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

“渲染器”会自动使用较小的上标分子和下标分母打印出来。但是,上面的代码只给我标准的1/2外观。我正在使用drawAtPoint将字符串放在屏幕上。我已经尝试过decomposedStringUsingCanonicalMapping和precomposedStringUsingCanonicalMapping,但说实话,文档丢失了我。

这应该有效还是NSString绘图不能解决这个问题?

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

我不知道unicode角色有什么方法可以获得你描述的属性。 AFAIK唯一能够将U + 2044与普通斜线区分开来的是它有点倾斜,两侧几乎没有空间,因此它可以更接近周围的数字。

Here's a page关于在HTML中使用Fraction Slash,正如您所看到的那样,如果您尝试自己使用它,您只会得到类似“1/10”的内容。它通过在周围数字上使用HTML中的<sup><sub>标记来进行补偿,以获得适当的显示效果。

为了让你在NSString中使用它,你将不得不找出一些方法来自己应用上标和下标周围的数字。

答案 2 :(得分:0)

有一些包含的Unicode字符可以给出实际的分数外观,但我认为它们仅限于1/2,1/3和1/4。

如果你想要任意分数,我觉得你需要一个自定义视图来绘制合适的外观;通过使用定位的子视图或drawRect:

答案 3 :(得分:0)

我知道这是很久以前的事了,但是如果它有帮助,那么你可以使用所有十进制数字的上标Unicode字符来显示大多数字体中的任意分数;在这里查看类似问题的答案 - https://stackoverflow.com/a/30860163/4522315

修改

根据评论,此解决方案取决于您使用的字体。 Amsi Pro(左)和其他商业字体往往包含上标所需的所有符号,但系统字体(右)不包括。

Nice font System font