下面有一段代码,它将字符串绘制到 UIView
使用CoreText
:
- (void) drawRect:(CGRect)rect
{
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)self.text);
CGMutablePathRef mutablePathRef = CGPathCreateMutable();
CGPathAddRect(mutablePathRef, NULL, self.bounds);
CTFrameRef frameRef = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), mutablePathRef, NULL);
CGFloat frameHeight = [self calculateHeightForFrame: frameRef];
//what do I do here to resposition the mutablePathRef?
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CTFrameDraw(frameRef, context);
CFRelease(frameRef);
CGPathRelease(mutablePathRef);
CFRelease(framesetter);
}
我初始化一个框架和框架 setter ,并将它们附加到 CGMutablePath
。然后我使用 CTLine
从框架的原点计算文本的高度,以便我可以将其垂直居中。
在这之后我有点难住了。有没有办法移动 CGMutablePath
的位置到一个新的原点,所以它会垂直居中?我试过 CGPathMoveToPoint
但它不起作用。
或者我需要创建一个全新的 CGMutablePath
还有一个全新的框架和框架 setter ?如果是这样,我该如何删除 CGMutablePath
?如果我发布了它会被删除吗?
任何关于我可以解决这个问题的有效方法的提示都会很棒,谢谢。
最佳答案
一旦使用 CGMutablePathRef
创建框架,修改路径不会对框架产生影响。此外,CGPathMoveToPoint
不会移动路径本身,而是移动当前点,允许追加新的子路径。
您可以在绘制之前通过在上下文上应用翻译来更改文本的位置。
CGContextTranslateCTM(x, y);
关于iphone - 如何移动CGMutablePathRef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9702999/