iOS-Swift CGContext实现-文字绘制

其他文章

iOS-Swift CGContext实现-基础图形

本篇介绍CGContext绘制文字

使用CGContext必备

steps 1
//获取绘图上下文
        guard let textContext = UIGraphicsGetCurrentContext() else {
            return
        }
  • 这里重要
    在UIView中的坐标原点在左上角与CoreText中的坐标原点是在左下角

//将坐标系系上下翻转
        textContext.textMatrix = CGAffineTransform.identity
        textContext.translateBy(x: 0, y: self.bounds.height)
        textContext.scaleBy(x: 1, y: -1)
let textPath = CGMutablePath()
        textPath.addRect(rect)
        textContext.addPath(textPath)
        //设置填充颜色
        textContext.setFillColor(UIColor.black.withAlphaComponent(0).cgColor)
        textContext.drawPath(using: .fill)
  • 关键
//根据framesetter和绘图区域创建CTFrame
        let str = "我的滑板鞋,时尚时尚最时尚"
        
        //文字样式属性
        let style = NSMutableParagraphStyle()
        style.alignment = .left
        
        //NSAttributedStringKey.font 不能用就用这个 NSFontAttributeName
        let attrString = NSAttributedString(string: str,
                                            attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 16),
                                                         NSAttributedStringKey.kern: -0.5,NSAttributedStringKey.foregroundColor: UIColor.white,
                                                         NSAttributedStringKey.paragraphStyle: style])
        let framesetter = CTFramesetterCreateWithAttributedString(attrString)
        let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, attrString.length),
                                             textPath, nil)
        //使用CTFrameDraw进行绘制
        CTFrameDraw(frame, textContext)

在文字样式属性(NSMutableParagraphStyle)中可以对文字进行设置

alignment -> left/center/right分别对应

iOS-Swift CGContext实现-文字绘制_第1张图片
图1.png

注意:图片是三张合一,文字的y坐标都是0,想要文字真正居中需要style.alignment = .center 同时在富文本中加入[NSAttributedStringKey.baselineOffset:(行高-字体高度)/2]
其他属性请看 文档

你可能感兴趣的:(iOS-Swift CGContext实现-文字绘制)