我之前在这里提到过我的博客作为问题的答案。我无法链接到其中一个,因为这个表格声称我是垃圾邮件发送者。叹。无论如何,现在我想写一篇关于绘制旋转文本的权威博客文章,所以它也可以用于答案(嘿)。这是我的第一次尝试:
http://www.platinumball.net/blog/2009/06/01/drawing-nsstrings-in-unusual-rotations/
效果很好,它可以完成我想要的一切,除了因为它使用了CGContextSelectFont(),它将文本输出限制为MacRoman。那是Teh Sukk。
我近一年来一直在寻找这个问题的答案,包括多次搜索这个网站,但没有成功。我见过的例子似乎与我想要的很接近,但显然我太愚蠢了,不能屈服于我的意志。我在我编写的NSString类中包含了main方法,它显示了我正在做的事情。如果您需要查看其余代码,可以从我上面给出的博客链接下载。谢谢......
-(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];
}
答案 0 :(得分:1)
我自己做了几天后才开始=)
这就是我解决它的方式:
view.layer.transform = CATransform3DRotate(view.layer.transform, 3.1415, 0,0,1); // this is for 180 degrees.
答案 1 :(得分:1)
使用the UIGraphicsPushContext
function然后draw the string using UIKit将CGContext设置为当前图形上下文,然后使用the UIGraphicsPopContext
function将上下文从堆栈中弹回。
AppKit(Mac)解决方案基本相同,步骤1使用NSGraphicsContext,步骤2使用AppKit's NSString additions。对于-[NSView drawRect:]
中的窗口上下文,步骤3消失(你会在步骤1中从NSGraphicsPort获取CGContext,意味着它已经设置);对于其他上下文,例如位图或PDF上下文,您将在步骤1和步骤3中使用相同的NSGraphicsPort方法(setCurrentContext:
)。