我正试图在我的iPhone应用程序中“很好地”显示分数。以前我一直使用繁琐的switch语句导致粗俗的unicode字符为粗俗的分数,但我已经了解了unicode分数斜杠字符,如果我正确理解它,应该意味着我可以创建一个字符串如下: / p>
[NSString stringWithFormat:@"%i\u2044%i",numerator,denominator];
“渲染器”会自动使用较小的上标分子和下标分母打印出来。但是,上面的代码只给我标准的1/2外观。我正在使用drawAtPoint将字符串放在屏幕上。我已经尝试过decomposedStringUsingCanonicalMapping和precomposedStringUsingCanonicalMapping,但说实话,文档丢失了我。
这应该有效还是NSString绘图不能解决这个问题?
答案 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(左)和其他商业字体往往包含上标所需的所有符号,但系统字体(右)不包括。