Рисование текста CGContext не масштабируется на iPhone 4

Я пытаюсь создать приложение, которое хорошо масштабируется на iPhone 4. В настоящее время большинство из них отлично масштабируется, за исключением одного важного фрагмента: текста, который я рисую внутри CALayer, внутри его drawInContext: метод. Вот мой код:

- (void)drawInContext:(CGContextRef)context {
    UIGraphicsPushContext(context);

    CGContextSetGrayFillColor(context, 1.0f, 1.0f);
    CGContextFillRect(context, self.bounds);

    CGContextSetAllowsAntialiasing(context, true);
    CGContextSetShouldAntialias(context, true);

    CGContextSetAllowsFontSmoothing(context, true);
    CGContextSetShouldSmoothFonts(context, true);

    CGContextSetAllowsFontSubpixelQuantization(context, true);
    CGContextSetShouldSubpixelQuantizeFonts(context, true);

    CGContextTranslateCTM(context, 0.0f, self.frame.size.height);
    CGContextScaleCTM(context, 1.0f, -1.0f);

    CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]);
    CGContextSelectFont(context, "CardKit", 30.0f, kCGEncodingMacRoman);
    CGContextSetTextDrawingMode(context, kCGTextFill);
    CGContextShowText(context, "A", sizeof("A"));

    UIGraphicsPopContext();
}

Этот короткий выводит четкий текст на обоих устройствах, но, к сожалению, он дает размытый текст на обоих устройствах. Вот как это выглядит:

некрасивый текст http://files.droplr.com.s3.amazonaws.com/files/16285043/1gBp61.Screen%20shot%202010-06-26%20at%2021:25:09.png

Это изображение получено при 100% увеличении на iPhone 4. Что в мире? Есть идеи, как я могу это исправить?

 Carter Allen12 июл. 2010 г., 00:48
Это просто делает письмо отрезанным. Увидеть:zcr.me/01g  Все еще размыто. Просто больше.
 scottbates2206 июл. 2010 г., 19:04
это всего лишь предположение, чтобы посмотреть, я не пытался понять, что он делает. В настоящее время вы используете шрифт 30pt, вы можете проверить размер строки шрифтом 60pt с помощью шрифта (CGSize) sizeWithFont: (UIFont *), и если ширина находится в пределах вашего целевого прямоугольника, то рисовать с использованием 60pt, а если нет, то рисовать с использованием 30pt , Экран iphone4 является прямым 2-кратным экраном iphone, поэтому я просто предполагаю, что рендеринг текста с удвоенным размером точки может сработать.

Ответы на вопрос(3)

Решение Вопроса

Вы должны установить слойcontentsScale быть таким же, какscale вашего экрана:

layer.contentsScale = [UIScreen mainScreen].scale;

Это позволит правильно масштабировать его на всех устройствах iOS, Retina Display и Non-Retina Display. Вы не должны жестко кодировать его до 2.0 (или чего-то еще), если у вас нет веских причин для этого.

 Tuyen Nguyen27 сент. 2011 г., 00:39
спасибо Мацумото
 Ben Lings09 мар. 2012 г., 14:48
Я обновил вышеуказанный пост с вашей ссылкой

Поскольку вы имеете дело с CALayers, вам нужно установить свойство context, ntsScale вашего слоя равным 2.0.

Увидетьэта секция в руководстве по программированию приложений iPhone для iOS 4.

 thierryb21 авг. 2010 г., 20:27
что происходит с дисплеем без сетчатки? Будет ли текст на 50% меньше?
 Carter Allen14 июл. 2010 г., 23:11
Работал отлично! Огромное спасибо!
 Nick Forge13 февр. 2011 г., 04:33
Да, он будет отображаться в неправильном масштабе (что делает этот ответ неверным). Для рендеринга изображений, которые будут правильно отображаться на дисплее Retina или не Retina, следует использовать-[UIScreen scale] свойство определять правильное значениеcontentsScale, Смотрите мой ответ на этот вопрос ...

Ваш ответ на вопрос