美文网首页小说阅读器相关 iOSiOS-阅读器系列
iOS CoreText计算每页显示的字数的方法

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

作者: 泽i | 来源:发表于2016-08-20 21:22 被阅读305次

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

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

    简易小说阅读器这是我没事的时候写的,当然还没写完,如果你有兴趣也可以加入进来。

    相关文章

      网友评论

      • Stormstout:工程 Podfile 没了,文件夹里只有Podfile.lock文件
      • 望洋兴叹:git的工程没有podfile文件
        b0b61bdd1a61:podfile , 不存在。楼主。在哪里。没看到啊。
        泽i:有 进入文件夹就能看到了

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

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