CGContextDrawImage в Retina рисует пиксель?

Мне нужно рисовать изображения в CALayer, потому что мне нужно выполнить на нем различные эффекты, анимации и фильтры. Когда я делаю простой рисунок в CGContext, независимо от того, что я делаю, он всегда рисуется пиксельно... Каков правильный путь к контексту в сетчатке?

Вот что я делаю сейчас:

CGImageRef plateImage = [[UIImage imageNamed:@"someImage"] CGImage];
CGFloat width = CGImageGetWidth(plateImage), height = CGImageGetHeight(plateImage);
CGFloat scale = [[UIScreen mainScreen] scale];

NSLog(@"Scale: %f\nWidth: %f\nHeight: %f", scale, width, height);
CGContextTranslateCTM(_context, 0, height / scale);
CGContextScaleCTM(_context, 1.0, -1.0);

CGContextDrawImage(_context, CGRectMake(0, 0, width / scale, height / scale), plateImage);

Ответ 1

Вам необходимо установить масштаб содержимого слоя соответствующим образом.

myLayer.contentsScale = [UIScreen mainScreen].scale

Ответ 2

У меня была та же проблема, но решение, похоже, не работало.

UIGraphicsBeginImageContext() оказался причиной моей проблемы. Я отправляю свое решение для будущих пользователей с той же проблемой.

Из iOS 4.0 вы должны использовать:

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);

вместо

UIGraphicsBeginImageContext(size);

Если вам не нужны пикселированные изображения.