美文网首页iOS开发攻城狮的集散地
iOS CoreText计算每页显示的字数的方法

iOS CoreText计算每页显示的字数的方法

作者: 阳明先生x | 来源:发表于2018-04-19 18:36 被阅读6次

    在做小说阅读器时,每章节的内容有很多文字,如果我们直接把章节的内容显示出来用户体验肯定不好,为此需要我们把章节内容分成几页去显示,每页的文字正好铺满我们设定的区域。
    下面的代码是用CoreText做的分页计算:

    NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:_contentText];
    [str addAttributes:[self attributesWithFont:_contentFont] range:NSMakeRange(0, str.length)];
    
    CFAttributedStringRef cfAttStr = (__bridge CFAttributedStringRef)str;
    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(cfAttStr);
    int textPos = 0;
    NSInteger totalPage = 0;
    NSUInteger strLength = [str length];
    while (textPos < strLength)  {
        //设置路径
        CGPathRef path = CGPathCreateWithRect(CGRectMake(0, 0, _textRenderSize.width, _textRenderSize.height), NULL);
        //生成frame
        CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(textPos, 0), path, NULL);
        //获取范围并转换为NSRange
        CFRange frameRange = CTFrameGetVisibleStringRange(frame);
        NSRange range = NSMakeRange(frameRange.location, frameRange.length);
        //以NSString形式保存
        [array addObject:NSStringFromRange(range)];
        //移动当前文本位置
        textPos += frameRange.length;
        CFRelease(frame);
        CGPathRelease(path);
        totalPage++;
        //释放路径和frame,页数加1
    }
    CFRelease(framesetter);
    
    

    代码中只设置了文本的字号。

    简易小说阅读器

    https://www.cnblogs.com/XYQ-208910/p/6222931.html

    相关文章

      网友评论

        本文标题:iOS CoreText计算每页显示的字数的方法

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