我想在可以占用任何形状的路径中写入文本.现在我可以在其中绘制翻转文本:
NSArray *coordinates = ...; CGMutablePathRef pathRef = [self objectPathGivenCoordinates:coordinates]; ... // Draw the shapes // Now draw the text CGContextSetTextMatrix(context, CGAffineTransformIdentity); NSAttributedString* attString = [[NSAttributedString alloc] initWithString:@"0,1,2..."]; CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attString); CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, [attString length]), pathRef, NULL); CTFrameDraw(frame, context);
这产生了这个:
我知道iOS有一个翻转坐标系.大多数解决方案在绘制之前添加这两行:
CGContextTranslateCTM(context, 0, rect.size.height); CGContextScaleCTM(context, 1.0, -1.0);
但这产生了这个:
那么为什么这种技术不起作用呢?在我见过的每个例子中,当文本以对称,剪切或OS X呈现时,使用此技术.如果我们以对称形状绘制文本,我们调用CGContextTranslateCTM()
并CGContextScaleCTM()
有意义.调用CGContextTranslateCTM(context, 0, rect.size.height)
,将第一个字母的原点移动到顶部.调用CGContextScaleCTM(context, 1, -1)
反转Y的方向.如果我们在对称形状上反转Y的方向,它不会改变.可悲的是,我的形状不对称.
这是我考虑过但放弃了
以相同的比例绘制形状和数字(两者都是倒置的),然后UIImageView
以某种方式翻转它(1)
不要拨打电话来改变比例或翻译CTM.翻转文本矩阵,CGContextSetTextMatrix()
以便从左到右,从下到上绘制文本,并且正面朝上.确定在确定形状的字符串后,形状中剩余多少个额外字符.翻转单词(现在它将从上到下,从右到左,右上方).为每个额外的角色添加空格.现在为每个人CTLine
,以某种方式再次反转单词(现在它将从上到下,从左到右,右上方)(2)
为什么我放弃了它们
(1)我无法翻转我的图像.他们总是需要正面朝上
(2)对于其他人知道的简单解决方案,这可能是过度的