相关疑难解决方法(0)

在Swift 3中绘制Core Graphics上的文本

背景:我正在使用Core Graphics绘制UIImageView.我想最终在核心图形绘图上绘制一个文本字符串.

这个(hackingwithswift.com)方法我用来将文本绘制到图像,将我的imageView设置为该图像,然后用核心图形绘制.但我希望文本覆盖核心图形绘图.

现在我已经转到这个/sf/answers/2490192001/,但它仍然不允许我在我的绘图上写.

class MapViewController: UIViewController {

    @IBOutlet var imageView: UIImageView!

    func drawScale() {
        // establish 6 points to draw a little bar with
        let length = CGFloat(80.0)
        let bottom = imageView.bounds.size.height - 15.0
        let left = CGFloat(20.0)
        let top = bottom - 20.0
        let middle = top + 10.0
        let right = left + length
        let topLeft = CGPoint(x: left, y: top)
        let topRight = CGPoint(x: right, y: top)
        let bottomRight = CGPoint(x: …
Run Code Online (Sandbox Code Playgroud)

core-graphics ios swift swift3

16
推荐指数
2
解决办法
1万
查看次数

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

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

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);
Run Code Online (Sandbox Code Playgroud)

这产生了这个:

翻转不对称形状的文本

我知道iOS有一个翻转坐标系.大多数解决方案在绘制之前添加这两行:

CGContextTranslateCTM(context, 0, rect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
Run Code Online (Sandbox Code Playgroud)

但这产生了这个:

现在,文本左右上方写入,但超出路径范围

那么为什么这种技术不起作用呢?在我见过的每个例子中,当文本以对称,剪切或OS X呈现时,使用此技术.如果我们以对称形状绘制文本,我们调用CGContextTranslateCTM()CGContextScaleCTM()有意义.调用CGContextTranslateCTM(context, 0, rect.size.height),将第一个字母的原点移动到顶部.调用CGContextScaleCTM(context, 1, -1)反转Y的方向.如果我们在对称形状上反转Y的方向,它不会改变.可悲的是,我的形状不对称.

这是我考虑过但放弃了

  • 以相同的比例绘制形状和数字(两者都是倒置的),然后UIImageView以某种方式翻转它(1)
  • 不要拨打电话来改变比例或翻译CTM.翻转文本矩阵,CGContextSetTextMatrix()以便从左到右,从下到上绘制文本,并且正面朝上.确定在确定形状的字符串后,形状中剩余多少个额外字符.翻转单词(现在它将从上到下,从右到左,右上方).为每个额外的角色添加空格.现在为每个人CTLine,以某种方式再次反转单词(现在它将从上到下,从左到右,右上方)(2)

为什么我放弃了它们

(1)我无法翻转我的图像.他们总是需要正面朝上

(2)对于其他人知道的简单解决方案,这可能是过度的

quartz-2d core-text ios

4
推荐指数
1
解决办法
822
查看次数

标签 统计

ios ×2

core-graphics ×1

core-text ×1

quartz-2d ×1

swift ×1

swift3 ×1