Вопрос

Я пытался отобразить текст, используя контекст Quartz, но независимо от того, что я пробовал, мне просто не повезло с отображением текста (хотя я могу отображать все виды других объектов Quartz).Кто-нибудь знает, что я, возможно, делаю не так?

пример:

-(void)drawRect:(CGRect)rect
{   
  // Drawing code
  CGContextRef  context = UIGraphicsGetCurrentContext();
  CGContextSelectFont(context, "Arial", 24, kCGEncodingFontSpecific);
  CGContextSetTextPosition(context,80,80);
  CGContextShowText(context, "hello", 6);
  //not even this works
  CGContextShowTextAtPoint(context, 1,1, "hello", 6);
}    
Это было полезно?

Решение

Вот фрагмент кода, который я использую.

UIColor *mainTextColor = [UIColor whiteColor];
[mainTextColor set];
drawTextLjust(@"Sample Text", 8, 50, 185, 18, 16);

И:

static void drawTextLjust(NSString* text, CGFloat y, CGFloat left, CGFloat right,
                          int maxFontSize, int minFontSize) {
    CGPoint point = CGPointMake(left, y);
    UIFont *font = [UIFont systemFontOfSize:maxFontSize];
    [text drawAtPoint:point forWidth:right - left withFont:font
       minFontSize:minFontSize actualFontSize:NULL
       lineBreakMode:UILineBreakModeTailTruncation
       baselineAdjustment:UIBaselineAdjustmentAlignBaselines];
}

Другие советы

Ладно, я понял.Прежде всего, измените режим кодирования на kCGEncodingMacRoman.Во-вторых, вставьте под ним эту строку:

CGContextSetTextMatrix(canvas, CGAffineTransformMake(1, 0, 0, -1, 0, 0));

Это устанавливает матрицу преобразования текста таким образом, чтобы он отображался правильно.Если вы не вставите эту строку, ваш текст будет перевернут задом наперед.Понятия не имею, почему это не было сделано по умолчанию.Наконец, убедитесь, что вы установили правильный цвет заливки.Легко совершить ошибку, если вы забудете сменить цвет фона на цвет текста и в итоге получите текст белым по белому.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top