【发布时间】:2010-01-29 16:39:47
【问题描述】:
我的博客之前已在此处提及,作为对问题的回答。我无法链接到其中一个,因为此表单声称我是垃圾邮件发送者。叹。无论如何,现在我想写一篇关于绘制旋转文本的权威博客文章,所以它也可以用于这里的答案(呵呵)。这是我的第一次尝试:
http://www.platinumball.net/blog/2009/06/01/drawing-nsstrings-in-unusual-rotations/
效果很好,它可以满足我的所有需求,除了因为它使用 CGContextSelectFont(),它将文本输出限制为 MacRoman。那是德苏克。
近一年来,我一直在寻找这个问题的答案,包括多次搜索这个网站,但都没有成功。我见过的例子似乎与我想要的很接近,但显然我太愚蠢了,无法将它们屈从于我的意愿。我包括了我编写的 NSString 类别的主要方法,它显示了我正在做的事情的胆量。如果您需要查看其余代码,可以从我上面给出的博客链接下载。谢谢...
-(void)drawAtPoint:(CGPoint)point withFont:(UIFont*)font
orientation:(WBOrientation)orient
{
CGContextRef ctxt = [self contextSave];
const std::string tbuf = toStdString(self, NSMacOSRomanStringEncoding);
CGAffineTransform tran = CGAffineTransformMake(1, 0, 0, -1, 0, 0);
switch (orient)
{
case WBOrientUp:
// nothing to do
break;
case WBOrientDown:
tran = CGAffineTransformRotate(tran, degreesToRadians(180.0));
break;
case WBOrientLeft:
tran = CGAffineTransformRotate(tran, degreesToRadians(90.0));
break;
case WBOrientRight:
tran = CGAffineTransformRotate(tran, degreesToRadians(-90.0));
break;
default:
assert(false);
break;
}
contextFont(ctxt, font);
CGContextSetTextDrawingMode(ctxt, kCGTextFill);
CGContextSetTextMatrix(ctxt, tran);
CGContextSetTextPosition(ctxt, point.x, point.y);
CGContextShowText(ctxt, tbuf.c_str(), tbuf.length());
[self contextRestore:ctxt];
}
【问题讨论】:
-
艾伦:浏览了你的博文。你说你需要
const char *并且很难得到它们。 NSString 有一个方法-cStringUsingEncoding:,它似乎可以直接做你需要的事情(请参阅有关它的内存管理的文档)。仅供参考。
标签: iphone core-graphics quartz-graphics