#iphone #uilabel #core-text
#iPhone #uilabel #основной текст
Вопрос:
Я использую CoreText на iPhone для получения курсивного текста в UIScrollView. CoreText на iPhone не поддерживает изображения. Итак, я говорю CoreText предоставить некоторое пространство для изображения, а затем использую CGContextDrawImage для рисования изображения blendedImage в прямоугольнике 300 на 120, что соответствует соотношению 2,5. Созданное изображение, которое в приведенном ниже коде является blendedImage, имеет тот же размер, что и 175/70 = 2,5. Поскольку создаваемое мной изображение blendedImage содержит текст, который я также хочу перенести в word, я создаю изображение, используя 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];
Я читал, что если позиции не являются целыми, это может привести к пикселизации. Но я не думаю, что это проблема здесь. Я также запустил инструменты в режиме основной анимации и включил «Изображения с неправильным выравниванием цвета», но созданное мной изображение не отображается как цветное, хотя другие изображения отображаются.
Кто-нибудь знает, почему текст в UILabel dccLabel размыт и неровен, и как я могу это исправить?
Ответ №1:
Понял это, мне потребовалось некоторое время! И ответ довольно прост. Просто нужно было сделать NewSize того же размера, что и прямоугольник, в который было отрисовано изображение.
CGSize newSize = CGSizeMake(300, 120);
Имеет смысл сделать размер изображения таким же, как размер прямоугольника, в который рисуется изображение, верно?