iphone - 如何移动CGMutablePathRef?

标签 iphone ios cocoa-touch core-graphics core-text

下面有一段代码,它将字符串绘制到 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/

相关文章:

objective-c - 水平 ScrollView IOS 的建议

iphone - 引用 AppDelegate 实例变量

iphone - iOS - 从 App Store 安装旧版本的应用程序

iphone - 如何让额外的按键显示在 iPhone 键盘上以进行网络输入?

android - Corona SDK 应用程序大小太大

ios - 为什么只有一个代表?

iphone - 如何检查某个功能是否适用于特定的 iOS 版本?

iphone - 是否可以在我的应用程序的默认设置应用程序中显示动态数据

ios - swift 3 : Append to UITextField while Editing Changed

ios - 尝试获取具有多个部分的 UITableView 的行数很困难