我正在尝试使用CoreText绘制文本。我有以下代码:
CGContextRef uiContext = UIGraphicsGetCurrentContext();
NSMutableDictionary<NSAttributedStringKey,id> *attributes = [NSMutableDictionary<NSAttributedStringKey,id> new];
[attributes setObject:UIColor.redColor forKey:NSForegroundColorAttributeName];
[attributes setObject:[UIFont systemFontOfSize:40] forKey:NSFontAttributeName];
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"Str" attributes:attributes];
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, nil, CGRectMake(0, 50, attrString.size.width, attrString.size.height));
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrString);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, attrString.length), path, nil);
CTFrameDraw(frame, uiContext);
因此,我尝试应用翻译和缩放转换,这对文本有帮助,但是现在它位于左下角,这不是您想要的行为。
CGContextSetTextMatrix(uiContext, CGAffineTransformIdentity);
CGContextTranslateCTM(uiContext, 0.0, self.bounds.size.height);
CGContextScaleCTM(uiContext, 1.0, -1.0);
这里有什么想法吗?谢谢。
答案 0 :(得分:1)
y原点的这50个值从哪里来?
CGPathAddRect(path, nil, CGRectMake(0, 50, attrString.size.width, attrString.size.height));
如果您从y坐标的左下角开始,则该50值将从该坐标开始以y原点50为起点。
通过使用容器视图的高度(要将文本绘制到其中)减去attrString.size.height,您应该能够将y原点调整为从顶部偏移。
下面是一个示例,该示例显示了绘制自定义视图的子类'drawRect:rect
的情况:
CGPathAddRect(path, nil, CGRectMake(0, rect.size.height - attrString.size.height, attrString.size.width, attrString.size.height));
这将导致以下结果:
答案 1 :(得分:0)
这个怎么样?
迅速:
CGContextSetTextMatrix(uiContext, CGAffineTransform(a: 1.0, b: 0.0, c: 0.0, d: -1.0, tx: 0.0, ty: 0.0))
目标c:
CGContextSetTextMatrix(uiContext, CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0));
要进行简单设置,请执行以下操作:
CGPathAddRect(path,nil, CGRectMake(0, 0, attrString.size.width, 1.5 * attrString.size.height));
代替:
CGPathAddRect(path, nil, CGRectMake(0, 50, attrString.size.width, attrString.size.height));