zoukankan      html  css  js  c++  java
  • iOS阅读器实践系列(二)多页排版

    当内容太多,一页显示不下时,就需要显示多页,本篇就介绍多页显示。

    这里的一页我们可以理解为一个视图,即这里我们需要多个视图来显示排版内容。在简单情况下,我们可在一个视图中绘制一个CTFrame(当然一个视图中可以绘制多个CTFrame)。那么问题转化为我们的内容字符串需要生成多个CTFrame,从而绘制到多个视图上。

    // 创建 CTFramesetterRef 实例
        CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)mabStr);
        
        NSMutableArray *frames = [[NSMutableArray alloc] init];
        int textPos = 0;
        while (textPos < mabStr.length)
        {   
            CTFrameRef frame = [self createFrameWithFramesetter:framesetter frameWidth:frameWidth stringRange:CFRangeMake(textPos, 0) orginY:OriginY height:frameHeight];
            
            CFRange frameRange = CTFrameGetVisibleStringRange(frame);
            
            CoreTextData *data = [[CoreTextData alloc] init];        
            [frames addObject:frame];
            
            textPos += frameRange.length;
            
            // 释放内存
            CFRelease(frame);
        }
        
        // 释放内存
        CFRelease(framesetter);

    代码有点简略,这里的主要内容就是while循环,主要思想是每次循环都从上次循环已排版到的字符的下一个字符开始到这次一共能显示下的字符为止,这个范围内的字符来生成用于本页显示的CTFrame,直到取完为止。

  • 相关阅读:
    gatekeeper学习概述
    通过浏览器下载服务器文件(日志)
    Jetty启动配置解析
    java单元测试小结
    TCP重传机制的学习应用
    laravel安装笔记 (转)
    TortoiseGit安装和使用的图文教程
    (转)HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
    PHP session 跨子域问题总结
    PHP session详解
  • 原文地址:https://www.cnblogs.com/summer-blog/p/6030885.html
Copyright © 2011-2022 走看看