iOS上具有不对称形状的核心文本

 南昌思锐 发布于 2023-02-11 21:02

我想在可以占用任何形状的路径中写入文本.现在我可以在其中绘制翻转文本:

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)对于其他人知道的简单解决方案,这可能是过度的

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有