• ios-coreText做微信点赞功能


    coretext绘制 个人理解为

    一个CTFrame有几个CTLine组成,有几行文字就有几行CTLine。一个CTLine有包含多个CTRun,一个CTRun是所有属性都相同的那部分富文本的绘制单元。所以CTRun是CTFrame的基本绘制单元

    资料博客链接地址:http://www.jianshu.com/p/6db3289fb05d

    计算绘制的coreText内容的高度

    + (int)getAttributedStringHeightWithString:(NSAttributedString *)string  WidthValue:(int)width

    {

        int total_height = 0;

        

        CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);    //string 为要计算高度的NSAttributedString

        CGRect drawingRect = CGRectMake(0, 0, width, 1000);  //这里的高要设置足够大

        CGMutablePathRef path = CGPathCreateMutable();

        CGPathAddRect(path, NULL, drawingRect);

        CTFrameRef textFrame = CTFramesetterCreateFrame(framesetter,CFRangeMake(0,0), path, NULL);

        CGPathRelease(path);

        CFRelease(framesetter);

        

        NSArray *linesArray = (NSArray *) CTFrameGetLines(textFrame);

        

        CGPoint origins[[linesArray count]];

        CTFrameGetLineOrigins(textFrame, CFRangeMake(0, 0), origins);

        

        int line_y = (int) origins[[linesArray count] -1].y//最后一行line的原点y坐标

        

        CGFloat ascent;

        CGFloat descent;

        CGFloat leading;

        

        CTLineRef line = (__bridge CTLineRef) [linesArray objectAtIndex:[linesArray count]-1];

        CTLineGetTypographicBounds(line, &ascent, &descent, &leading);

        

        total_height = 1000 - line_y + (int) descent +1;    //+1为了纠正descent转换成int小数点后舍去的值

        

        CFRelease(textFrame);

        

        return total_height;

        

    }

  • 相关阅读:
    hadoop2 作业执行过程之作业提交
    Hadoop各个服务端口列表
    基于 Nginx 和 FFmpeg 搭建流媒体服务器
    prometheus
    ubuntu 下dbus的环境搭建和使用
    Hadoop-Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster —
    Exception message: /bin/bash: line 0: fg: no job control
    P3942 将军令 [贪心]
    P3941 入阵曲
    P3941 入阵曲
  • 原文地址:https://www.cnblogs.com/nngh/p/5753137.html
Copyright © 2020-2023  润新知