其他文章
本篇介绍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分别对应
注意:图片是三张合一,文字的y坐标都是0,想要文字真正居中需要style.alignment = .center 同时在富文本中加入[NSAttributedStringKey.baselineOffset:(行高-字体高度)/2]
其他属性请看文档