swift context绘制文本

环境xcode 9 beta 6

CoreText是一个进阶的比较底层的布局文本和处理字体的技术;CoreText 技术相对于 UIWebView,有着更少的内存占用,以及可以在后台渲染的优点,非常适合用于内容的排版工作。

CoreText 是用于处理文字和字体的底层技术。它直接和 Core Graphics(又被称为 Quartz)打交道。Quartz 是一个 2D 图形渲染引擎。Quartz 能够直接处理字体(font)和字形(glyphs),将文字渲染到界面上,它是基础库中唯一能够处理字形的模块。因此,CoreText 为了排版,需要将显示的文本内容、位置、字体、字形直接传递给 Quartz。相比其它 UI 组件,由于 CoreText 直接和 Quartz 来交互,所以它具有高速的排版效果.
context对象模型图:

swift context绘制文本_第1张图片
954071-c267eaa81fb1b5b7.png

'''

    //1.获取上下文
    let context = UIGraphicsGetCurrentContext()
    
    //2转换坐标
    context?.textMatrix = CGAffineTransform.identity
    context?.translateBy(x: 0, y: self.bounds.size.height)
    context?.scaleBy(x: 1.0, y: -1.0)
    
    //生成path
    let path = CGMutablePath()
    path.addRect(self.bounds)
    
    let path1 = UIBezierPath(roundedRect: self.bounds, cornerRadius: self.bounds.size.width/2).cgPath
    //4.文本
        //4.1
    //let attrString = NSAttributedString(string: "Hello CoreText!")
    let str = "Hello CoreText!Hello CoreText!Hello CoreText!Hello               CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!Hello CoreText!"
    let mutableAttrStr = NSMutableAttributedString(string: str)
mutableAttrStr.addAttributes([NSAttributedStringKey.font:UIFont.systemFont(ofSize: 20),NSAttributedStringKey.foregroundColor:UIColor.white], range: NSMakeRange(0, 10))
    mutableAttrStr.addAttributes([NSAttributedStringKey.font:UIFont.systemFont(ofSize: 16),NSAttributedStringKey.underlineStyle:1], range: NSMakeRange(10, 10))
     //设置行间距
    let style = NSMutableParagraphStyle()
    style.lineSpacing = 10
    mutableAttrStr.addAttributes([NSAttributedStringKey.paragraphStyle:style], range: NSMakeRange(0, mutableAttrStr.length))
let frameSetter = CTFramesetterCreateWithAttributedString(mutableAttrStr)
    let frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, mutableAttrStr.length), path1, nil)
    
    //5绘制
    CTFrameDraw(frame, context!)

'''

你可能感兴趣的:(swift context绘制文本)