2008-09-27 3 views
7

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

пример:

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

ответ

7

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

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]; 
} 
+0

Он должен быть @ «Образец текста», поскольку функция ожидает NSString *. Это работает для меня иначе, спасибо. Однако я не могу найти ссылку на функцию drawAtPoint, которая вызывает беспокойство. – CiscoIPPhone 2010-11-01 19:24:57

+1

drawAtPoint является частью категории UIKit NSString - http://developer.apple.com/library/ios/#documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html – Hunter 2011-01-07 19:19:21

9

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

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

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