Ответ 1
Вам необходимо установить масштаб содержимого слоя соответствующим образом.
myLayer.contentsScale = [UIScreen mainScreen].scale
Мне нужно рисовать изображения в 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);
Вам необходимо установить масштаб содержимого слоя соответствующим образом.
myLayer.contentsScale = [UIScreen mainScreen].scale
У меня была та же проблема, но решение, похоже, не работало.
UIGraphicsBeginImageContext()
оказался причиной моей проблемы. Я отправляю свое решение для будущих пользователей с той же проблемой.
Из iOS 4.0 вы должны использовать:
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
вместо
UIGraphicsBeginImageContext(size);
Если вам не нужны пикселированные изображения.