Как отобразить текст с помощью Quartz на iPhone? - PullRequest
7 голосов
/ 27 сентября 2008

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

пример:

-(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);
}    

Ответы [ 2 ]

9 голосов
/ 11 августа 2010

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

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

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

7 голосов
/ 27 сентября 2008

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

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];
}
...