【问题标题】:How to display text using Quartz on the iPhone?如何在 iPhone 上使用 Quartz 显示文本?
【发布时间】:2008-09-27 08:10:34
【问题描述】:

我一直在尝试使用 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);
}    

【问题讨论】:

    标签: iphone cocoa-touch quartz-2d


    【解决方案1】:

    好的,我明白了。首先,将您的编码模式更改为 kCGEncodingMacRoman。其次,在它下面插入这一行:

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

    这会设置文本的转换矩阵,以便正确绘制。如果您不输入该行,则您的文本将上下颠倒并从后向前。不知道为什么这不是默认设置。最后,确保您设置了正确的填充颜色。如果您忘记将背景颜色更改为文本颜色并最终得到白底白字,则很容易犯错误。

    【讨论】:

    • 这不是默认的,因为这个函数——以及所有 Quartz——在 iOS 上的操作与在 OS X 上的操作完全相同,以实现便携性,但出于某种原因,它们将 [default] 系统范围的坐标系统倒置为IOS。在 Mac 上 (0, 0) 是左下角,在 iOS 上是左上角。如果您要移植 Mac 代码,则在执行所有代码之前只需反转和重新定位坐标系一次,而不是为每个基元考虑它。
    【解决方案2】:

    这是我正在使用的一段代码。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 2010-12-26
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多