Я использую CoreText на iPhone, чтобы получить курсивный текст в UIScrollView.CoreText на iPhone не поддерживает изображения.Поэтому я советую CoreText выделить некоторое пространство для изображения, а затем использовать CGContextDrawImage, чтобы нарисовать изображение, blendedImage, в прямоугольнике 300 на 120, что составляет 2,5.Созданное изображение, представляющее собой изображение blendedImage в приведенном ниже коде, имеет такой же коэффициент размера, что и 175/70 = 2,5.Поскольку изображение, blendedImage, которое я создаю, содержит текст, который я также хочу переносить по словам, я создаю изображение с помощью renderInContext для UILabels, которые находятся в изображении.Проблема в том, что текст в UILabels размыт и пикселизирован.Кто-нибудь знает, как я могу это исправить?
Вот код:
CGRect dccFrame = CGRectIntegral(CGRectMake(0, 60, 70, 72)); // 20, 60, 100, 72
UILabel *dccLabel = [[UILabel alloc] initWithFrame:CGRectIntegral(dccFrame)];
dccLabel.backgroundColor = [UIColor clearColor];
dccLabel.numberOfLines = 0;
dccLabel.lineBreakMode = UILineBreakModeWordWrap;
NSString *titledccString = self.dccString;
dccLabel.textColor = [UIColor blackColor];
dccLabel.font = [UIFont fontWithName:@"Arial-BoldMT" size:7];
[dccLabel setText:titledccString];
[dccLabel sizeToFit];
CGSize newSize = CGSizeMake(176, 70);
UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale);
CGContextRef gc = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(gc, 1, 1, 1, 1);
CGContextSetShouldSmoothFonts(gc, YES);
CGContextSetAllowsAntialiasing(gc, YES);
CGContextSetShouldAntialias(gc, YES);
UIGraphicsPushContext(gc);
CGAffineTransform trf1 = CGAffineTransformMakeTranslation(0, 0);
CGContextSaveGState(gc);
CGContextConcatCTM(gc, trf1);
[[UIImage imageNamed: imageString] drawInRect:CGRectIntegral(CGRectMake(70, 0, 46, 60))];
CGContextRestoreGState(gc);
UIGraphicsPopContext();
CGAffineTransform trf3 = CGAffineTransformMakeTranslation(0, 30);
CGContextSaveGState(gc);
CGContextConcatCTM(gc, trf3);
[dccLabel.layer renderInContext:gc];
CGContextRestoreGState(gc);
UIImage *blendedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[dccLabel release];
Я читал, что, если позиции не являются целыми числами, это может вызвать пикселизацию.Но я не думаю, что это проблема здесь.Я также запускал инструменты в режиме основной анимации и включил «Color Misaligned Images», но созданное мной изображение не отображается как цветное, хотя другие изображения делают.
Кто-нибудь знает, почему текст в UILabeldccLabel размыт и пикселизирован, и как я могу это исправить?