Размытые UIView с CATransform3D только на RETINA - PullRequest
9 голосов
/ 14 марта 2012

Я отображаю UIView с UILabel на нем, и этот вид и метка становятся размытыми, как только они попадают в код этих строк:

CATransform3D transform = CATransform3DIdentity;      
transform.m34 = (1.0/-500);
view.layer.transform = transform;

Во всем приложении я использую CA3DRotations и другие вещи, и это никогдаслучилось раньшеКроме того, я устанавливаю рамку вида и метку только с помощью целых чисел!Так что это не полупиксельная проблема или что-то в этом роде, я знаю, что это вызывает большинство размытых проблем, но не мое!

На симуляторе это не размыто, iPad не размыт, iPhone3GS не размыт.Только на iPhone4 с дисплеем Retina оно становится размытым.Еще до того, как я сделаю какие-либо 3D вращения!У кого-нибудь есть подсказка, прежде чем я сойду с ума?

Ответы [ 4 ]

25 голосов
/ 21 марта 2012

Хорошо, я нашел решение. После использования сотен различных строк кода с использованием свойств слоя, таких как гравитация или увеличение слоя и множество других решений, я неожиданно наткнулся на следующие 2 строки:

self.layer.shouldRasterize = TRUE;
self.layer.rasterizationScale = [[UIScreen mainScreen] scale];

Это решение! Для всех ли в будущем ваш взгляд на сетчатке будет размытым? Используйте это!

3 голосов
/ 16 марта 2012

Вы установили contentsScale для слоя, чтобы соответствовать [UIScreen mainScreen]. scale? Попытайся.

0 голосов
/ 19 ноября 2013

Если ваша конечная посадочная позиция предназначена для того, чтобы быть плоской / нетрансформированной, простая установка преобразования в идентичность CATransform3D также решит проблему. В зависимости от того, как объекты анимированы, установка конечной позиции для одного из трехмерных преобразований на 0,0 может по-прежнему приводить к ошибкам округления и создавать нечеткий вид.

0 голосов
/ 20 марта 2012

Возможно, ваши просмотры находятся "между пикселями" (например, центр - это [12,5, 10]).Попробуйте округлить их местоположение и посмотрите, поможет ли это.

...