NSString представление фракций с использованием Unicode - PullRequest
6 голосов
/ 03 августа 2011

Я пытаюсь «красиво» отобразить дроби в своем приложении для iPhone. Ранее я использовал утомительный оператор switch, приводящий к жестко закодированным символам Юникода для вульгарных дробей, но я узнал о символе косой черты дроби Юникод, который, если я правильно понимаю, должен означать, что я могу создать строку следующим образом:

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

И «рендер» автоматически распечатает его с меньшим числовым индексом и индексом. Тем не менее, приведенный выше код просто дает мне стандартный вид 1/2. Я использую drawAtPoint, чтобы поместить строку на экран. Я экспериментировал с раскладом StringUsingCanonicalMapping и precomposedStringUsingCanonicalMapping, но, честно говоря, документация потеряла меня.

Должно ли это работать или чертеж NSString не справляется с этим?

Ответы [ 4 ]

2 голосов
/ 25 августа 2013

Мне просто нужно, чтобы простые рецепты в рецептах конвертировались в вульгарные фракции 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 голос
/ 03 августа 2011

Я не знаю, каким образом у символа юникода есть свойства, которые вы описываете.AFAIK единственное, что отличает U + 2044 от обычной косой черты, это то, что он немного более наклонен и имеет практически незанятое пространство с обеих сторон, поэтому он расположен ближе к окружающим числам.

Вот страница об использовании дробной черты в HTML, и, как вы можете видеть, она демонстрирует, что вы просто получите что-то вроде «1⁄10», если попытаетесь использовать его самостоятельно.Это компенсирует это с помощью тегов <sup> и <sub> в HTML на окружающих числах, чтобы получить соответствующее отображение.

Для того, чтобы вы работали в NSString, вы будете иметьвыяснить, как применить надстрочные и подписные номера к окружающим номерам самостоятельно.

0 голосов
/ 16 июня 2015

Я знаю, что это было давно, но если это поможет, для всех десятичных чисел есть верхний индекс символов Юникода, который можно использовать для отображения произвольных дробей в большинстве шрифтов;см. ответы на аналогичный вопрос здесь - https://stackoverflow.com/a/30860163/4522315

Редактировать:

Согласно комментариям, это решение зависит от шрифта, который вы используете.Amsi Pro (слева) и другие коммерческие шрифты, как правило, включают все необходимые символы для надстрочных знаков, но системный шрифт (справа) этого не делает.

Nice font System font

0 голосов
/ 03 августа 2011

Есть некоторые включенные символы Юникода, которые дают фактические значения дроби, но я думаю, они ограничены 1/2, 1/3 и 1/4.произвольные дроби, мне кажется, вам нужен собственный вид, который рисует соответствующий вид;либо с помощью позиционированных подпредставлений, либо drawRect:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...