为 PaintCode CGContext 自动调整标签中的文本

Posted

技术标签:

【中文标题】为 PaintCode CGContext 自动调整标签中的文本【英文标题】:Autosize Text in Label for PaintCode CGContext 【发布时间】:2015-04-09 22:34:24 【问题描述】:

我正在使用以下内容在 Bezier 路径内绘制文本。我如何调整它以允许文本自动调整大小。

编辑

我能够更新到 ios7 方法,但仍然没有。我可以在 UILabel 中自动调整文本大小,但因为这是 CGContext,所以更难

        NSString* textContent = @"LOCATION";

        NSMutableParagraphStyle* locationStyle = NSMutableParagraphStyle.defaultParagraphStyle.mutableCopy;
        locationStyle.alignment = NSTextAlignmentCenter;

        NSDictionary* locationFontAttributes = @NSFontAttributeName: [UIFont fontWithName:myFont size: 19], NSForegroundColorAttributeName: locationColor, NSParagraphStyleAttributeName: locationStyle;
        CGFloat locationTextHeight = [textContent boundingRectWithSize: CGSizeMake(locationRect.size.width, INFINITY)  options: NSStringDrawingUsesLineFragmentOrigin attributes: locationFontAttributes context: nil].size.height;
        CGContextSaveGState(context);
        CGContextClipToRect(context, locationRect);
        [textContent drawInRect: CGRectMake(CGRectGetMinX(locationRect), CGRectGetMinY(locationRect) + (CGRectGetHeight(locationRect) - locationTextHeight) / 2, CGRectGetWidth(locationRect), locationTextHeight) withAttributes: locationFontAttributes];
        CGContextRestoreGState(context);

【问题讨论】:

【参考方案1】:

试试NSAttributedString这个方法:

- (CGRect)boundingRectWithSize:(CGSize)size
                       options:(NSStringDrawingOptions)options
                       context:(NSStringDrawingContext *)context;

context 将为您提供actualScaleFactor

用法是这样的:

NSAttributedString *string = ...;
NSStringDrawingContext *context = [NSStringDrawingContext new];
context.minimumScaleFactor = 0.5; // Set your minimum value.

CGRect bounds = [string boundingRectWithSize:maxSize
                                     options:NSStringDrawingUsesLineFragmentOrigin
                                     context:context];
CGFloat scale = context. actualScaleFactor;
// Use this scale to multiply font sizes in the string, so it will fit.

【讨论】:

这个值乘以什么? 从现有字体创建新字体,如下所示:[font fontWithSize: font.pointSize * scale];

以上是关于为 PaintCode CGContext 自动调整标签中的文本的主要内容,如果未能解决你的问题,请参考以下文章

调整 PaintCode 应用程序生成的图像大小

CGContext 解释

Paintcode 为自定义按钮生成 iOS 代码(不工作)

PaintCode 鼠标绘图转CGPath代码

Paintcode 导出到子文件夹

PaintCode 绘图代码 android 使用像素而不是点/DP