Рендеринг UITableViewCell с помощью drawRect: на дисплее Retina iPad отображается размыто

Я использую drawRect: в своем подклассе UITableViewCell для производительности рендеринга при прокрутке; все в ячейке (текст и графика) отображается в drawRect:. На дисплее сетчатки нового iPad ячейка выглядит очень размытой.

Для сравнения, вот скриншот, на котором показаны обе ячейки (вверху) и другое изображение одинакового размера внизу. Разница между качеством нижнего изображения и качеством ячеек очевидна.

Снимок экрана сделан на iPad с дисплеем Retina

Это на физическом устройстве, а не на симуляторе. Я проверил, что UIImage экземпляров, которые я использую, имеют масштаб 2; изображения аватара пользователя загружаются из Интернета, поэтому проблема не в суффиксе @2x. «Потрясающее» изображение — это тот же ресурс, загруженный из основного пакета. Далее сам текст размыт.

Я пробовал разные варианты сглаживания, но безрезультатно. Я также пытался установить contentScaleFactor моего представления и contentScale слоя моего представления на [[UIScreen mainScreen] scale], но это тоже не помогает.

Какие-либо предложения?

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

Вот фрагмент метода drawRect:, отвечающего за рендеринг аватара пользователя. _avatar — это переменная экземпляра, а addRoundedRectToPath() просто обрезает радиус угла в 5 точек от пути контекста.

{
    CGContextSaveGState(context);

    addRoundedRectToPath(context, avatarFrame, 5, 5);
    CGContextClip(context);

    [_avatar drawInRect:avatarFrame];

    CGContextRestoreGState(context);
}

Текст комментария отображается аналогичным образом:

[[UIColor whiteColor] set];
[_body drawInRect:textRect withFont:kPXCompositePhotoCommentCellBodyFont];

Я развертываю iOS 5.0 с базовым SDK 5.1, используя Xcode 4.3.2.


person Ash Furrow    schedule 22.03.2012    source источник
comment
Можете ли вы добавить исходный код, чтобы показать, как вы справляетесь с этим в -drawRect:? Это очень похоже на то, что может произойти после немасштабированного UIGraphicsCreateImageContext() для выполнения внеэкранного рендеринга, но помимо этого его трудно диагностировать.   -  person Jim Dovey    schedule 22.03.2012
comment
Я добавил пример кода — есть ли что-то особенное, что мне нужно установить в моем графическом контексте, чтобы указать, что он должен отображаться с более высокой плотностью пикселей?   -  person Ash Furrow    schedule 22.03.2012
comment
Я пока не вижу там ничего подозрительного. Делаете ли вы что-нибудь еще с текущим контекстом в этот момент? Кроме того, что находится в стеке — это простой вызов -drawRect:, или вы делаете какой-то трюк, чтобы получить сплющенные изображения ячеек, подобные тому, что Лорен Брихтер использовал в Tweetie в свое время? Возможно, посмотрите на CTM/масштаб контекста, чтобы увидеть, что происходит на уровне компьютерной графики?   -  person Jim Dovey    schedule 22.03.2012
comment
Нет выравнивания изображения; Я просто позволяю системе вызывать drawRect: вместо меня. Единственное, что я делаю с контекстом, это добавляю закругленные углы, но проблема сохраняется как при их удалении, так и в тексте, чей контекст не тронут.   -  person Ash Furrow    schedule 22.03.2012
comment
Вы рисуете в представлении ячейки или в представлении содержимого ячейки? Или подвид этого?   -  person Jim Dovey    schedule 22.03.2012


Ответы (1)


Вы настроили слой вида на растеризацию? Это добровольная вещь, и иногда она используется как уловка для ускорения работы сотовой связи. Но неправильное использование может привести к некрасивым слоям.

person jbrennan    schedule 22.03.2012
comment
Сладкий! На самом деле это был слой, содержащий табличное представление ячейки. - person Ash Furrow; 22.03.2012
comment
Красиво - мне помогло. Мне нужно было добавить растровый код в представление контейнера для табличного представления. [_uiv_tableContainer.layer setRasterizationScale:[[UIScreen mainScreen] масштаб]]; [_uiv_tableContainer.layer setShouldRasterize:YES]; - person malaki1974; 21.08.2013