• 基于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);
    
    }
  • 相关阅读:
    使用过滤器解决JSP页面的乱码问题
    六度空间(MOOC)
    navicat连接mysql出现1251错误
    Saving James Bond
    列出连通集(mooc)
    File Transfer(并查集)
    堆中的路径(MOOC)
    智慧树mooc自动刷课代码
    Hibernate三种状态的区分。
    Hibernate中get和load方法的区别
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4641579.html
Copyright © 2020-2023  润新知