CGContextShowTextAtPoint即使在不同的迭代中也有固定的大小?

时间:2013-05-16 17:52:58

标签: ios objective-c

我在自定义视图中使用以下代码绘制了一些文本:

- (void)drawProgramDescription:(CGContextRef) context {
    UIGraphicsPushContext(context);
    // get string from dataSource
    NSString *programDescription = [self.dataSource giveDescriptionOfProgram:self];
    // convert string to a C string
    const char *programDescriptionCString = [programDescription 
                                             cStringUsingEncoding:kCGEncodingMacRoman];
    CGContextSelectFont(context, "Helvetica", 1, kCGEncodingMacRoman);
    // draw it
    CGContextShowTextAtPoint(context, 20, 20, programDescriptionCString, 
                                              sizeof(programDescriptionCString) + 1);
    UIGraphicsPopContext();
}

在我的drawRect方法中调用此方法,以便文本显示在我的自定义视图中。

然而,问题在于,即使我的CGContextShowTextAtPoint已经在不同的迭代中,放入drawRect的字符串的大小也是固定的。

例如,如果第一次显示的文字是:

X*X

第二次调用drawRect时应该绘制文本

sin(X)

它不会完全显示文本,而是在

处剪切文本
sin(

在drawRect的第一次迭代中仍然具有原始大小。

这是CGContextShowTextAtPoint的功能吗?或者我错过了什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

因为pointers are not arrays

sizeof(programDescriptionCString)

产生指针的大小,显然是4个字节。请改用strlen()(并获取介绍性的C教程)。

答案 1 :(得分:2)

您可能更乐意逃离CGContextShowTextAtPoint。这太受限制了。相反,请使用NSString UIKit Additions中记录的方法。

他们绘制真正的NSStrings。他们吸收了当前的背景。他们对字符串,编码,字体,边界矩形等了解得更多。

在iOS 6中,甚至还有并行的NSAttributedString方法。