美文网首页iOS-阅读器系列
CoreText的认识(一)

CoreText的认识(一)

作者: 向日葵的夏天_summer | 来源:发表于2018-12-18 09:54 被阅读0次

    整理下最近关于学习CoreText的认识和理解

    1.关于坐标系

    CoreText坐标系和UIKit坐标系是不一样的,UIKit坐标系是以左上角为原点,而CoreText坐标系是以左下角为原点的。
    所以,我们在CoreText布局完成后要对坐标系进行转换。

    override func draw(_ rect: CGRect) {
        super.draw(rect)
        
        // 1. 获取上下文
        let context = UIGraphicsGetCurrentContext()
        
        // 2. 翻转坐标
        context?.textMatrix = .identity
        context?.translateBy(x: 0, y: self.bounds.size.height)
        context?.scaleBy(x: 1.0, y: -1.0)
    }
    

    2.CoreText布局步骤

    • 1.首先要确定布局时绘制的区域;
    • 2.设置文本内容;
    • 3.生成CTFramesetter;
    • 4.生成CTFrame;
    • 5.CTFrameDraw绘制;
        override func draw(_ rect: CGRect) {
        super.draw(rect)
    
        let context = UIGraphicsGetCurrentContext()
        
        context?.textMatrix = .identity
        context?.translateBy(x: 0, y: self.bounds.height)
        context?.scaleBy(x: 1.0, y: -1.0)
        
        let path = UIBezierPath(rect: self.bounds)
        
        let attributeString = NSMutableAttributedString(string: "aaaaaaaaaaaaaaaaa")
        attributeString.addAttributes([NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16), NSAttributedString.Key.foregroundColor: UIColor.blue], range: NSRange(location: 0, length: attributeString.length))
        
        let framesetter = CTFramesetterCreateWithAttributedString(attributeString)
        
        let ctframe = CTFramesetterCreateFrame(framesetter, CFRange(location: 0, length: attributeString.length), path.cgPath, nil)
        
        CTFrameDraw(ctframe, context!)
        }
    

    相关文章

      网友评论

        本文标题:CoreText的认识(一)

        本文链接:https://www.haomeiwen.com/subject/bgdkkqtx.html