在文本matrix上使用多个CGAffineTransforms

我使用Quartz显示文本。 这是我的代码:

CGContextRef myContext = UIGraphicsGetCurrentContext(); CGContextSelectFont(myContext, "Helvetica", 12, kCGEncodingMacRoman); CGContextSetCharacterSpacing(myContext, 8); CGContextSetTextDrawingMode(myContext, kCGTextFillStroke); CGContextSetRGBFillColor(myContext, 0, 0, 0, 1); CGContextSetRGBStrokeColor(myContext, 0, 0, 0, 1); CGContextSetTextMatrix(myContext,CGAffineTransformMake(1, 0, 0, -1, 0, 0)); CGContextShowTextAtPoint(myContext, textOrigin.x, textOrigin.y,[way.name UTF8String],[way.name length]); 

这显示我的文本正确的方式,在正确的方向,但是我也需要添加一个旋转的文本使用CGAffineTransformMakeRotation(angle); 。 我似乎无法弄清楚如何在文本matrix上应用两个仿射变换,但没有一个覆盖另一个。 任何帮助将是伟大的。

您可以将matrix与CGAffineTransformConcat结合使用,例如

 CGAffineTransform finalTransf = CGAffineTransformConcat(t1, t2); 

如果你只需要旋转一个现有的matrix,使用CGAffineTransformRotate ,例如

 CGAffineTransform t = CGAffineTransformMake(1, 0, 0, -1, 0, 0); CGAffineTransform t = CGAffineTransformRotate(t, M_PI/2); CGContextSetTextMatrix(myContext, t); 

要补充@ kennytm的答案,要应用两个以上的转换,您可以执行以下操作:

 var t = CGAffineTransformIdentity t = CGAffineTransformTranslate(t, CGFloat(100), CGFloat(300)) t = CGAffineTransformRotate(t, CGFloat(M_PI_4)) t = CGAffineTransformScale(t, CGFloat(-1), CGFloat(2)) // ... add as many as you want, then apply it to to the view imageView.transform = t 

去这里看看我的完整答案。