0

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

- (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吗?还是我错过了什么?

谢谢!

4

2 回答 2

2

因为指针不是数组

sizeof(programDescriptionCString)

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

于 2013-05-16T17:56:14.587 回答
2

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

他们绘制真正的 NSStrings。他们融入了当前的环境。他们更了解字符串、编码、字体、边界矩形等。

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

于 2013-05-16T18:04:39.847 回答