我在自定义视图中使用以下代码绘制了一些文本:
- (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
的功能吗?或者我错过了什么?
谢谢!
答案 0 :(得分:2)
sizeof(programDescriptionCString)
产生指针的大小,显然是4个字节。请改用strlen()
(并获取介绍性的C教程)。
答案 1 :(得分:2)
您可能更乐意逃离CGContextShowTextAtPoint
。这太受限制了。相反,请使用NSString UIKit Additions中记录的方法。
他们绘制真正的NSStrings。他们吸收了当前的背景。他们对字符串,编码,字体,边界矩形等了解得更多。
在iOS 6中,甚至还有并行的NSAttributedString方法。