• 基于CoreText的基础排版引擎之不带图片的排版引擎


    - (void)drawRect:(CGRect)rect {
    
        [super drawRect:rect];
    
        //步骤一:得到当前绘制画布上下文,用于后续将内容绘制在画布上
    
        CGContextRef context = UIGraphicsGetCurrentContext();
    
        //步骤二:将坐标系上下翻转。对于底层的绘制引擎来说,屏幕左下角是(0,0)坐标。而对于上层的UIKit来说,左上角是(0,0)坐标。所以我们为了之后的坐标系描述按UIKit来显示,这里做了一个坐标系上下翻转操作。翻转之后,底层和上层的(0,0)坐标就是重合的了。
    
        CGContextSetTextMatrix(context, CGAffineTransformIdentity);
    
        CGContextTranslateCTM(context, 0, self.bounds.size.height);
    
        CGContextScaleCTM(context, 1.0, -1.0);
    
        
    
        //步骤三:创建绘制区域
    
        CGMutablePathRef path = CGPathCreateMutable();
    
        CGPathAddRect(path, NULL, self.bounds); 
    
    //    CGPathAddEllipseInRect(path, NULL, self.bounds);
    
        
    
        //步骤四
    
        NSAttributedString *attString = [[NSAttributedString alloc] initWithString:@"ScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhang"];
    
        CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attString);
    
        CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, [attString length]), path, NULL);
    
        //步骤五
    
        CTFrameDraw(frame, context);
    
        //步骤六
    
        CFRelease(frame);
    
        CFRelease(path);
    
        CFRelease(framesetter);
    
    }
  • 相关阅读:
    【JBPM4】State 节点
    【JBPM4】EL表达式的使用,实现JAVA与JPDL的交互
    不常见的javascript调试技巧
    mac navicat premium 使用技巧
    fnb2b分支拉取注意事项
    mac上为nodejs设置环境变量
    nodejs项目进程管理器之pm2
    有关defer和async的区别
    关于viewport我自己的理解
    样式技巧总结
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4641579.html
Copyright © 2020-2023  润新知