7

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

2 に答える 2

9

はい、分かりました。まず、エンコード モードを kCGEncodingMacRoman に変更します。次に、その下に次の行を挿入します。

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

これにより、テキストが正しく描画されるように、テキストの変換マトリックスが設定されます。その行を入れないと、テキストが上下逆になり、前後が逆になります。これがデフォルトではない理由がわかりません。最後に、正しい塗りつぶしの色を設定したことを確認してください。背景色からテキストの色に変更するのを忘れて、白地に白のテキストになってしまうと、犯しがちな間違いです。

于 2010-08-11T13:13:48.407 に答える
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];
}
于 2008-09-27T10:04:29.770 に答える