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,直到取完为止。

  • 相关阅读:
    Windows Phone 7 立体旋转动画的实现
    jQuery 表格Table插件汇总
    SNS社交类网站照片头像裁剪源码
    VS无法启动调试
    SQL Server中获取第一天、最后一天
    jQuery技巧总结
    IT人士应当知道的10个行业小内幕
    巧用SQL server临时表
    将Html文档整理为规范XML文档
    16个Javascript的Web UI库、框架及工具包
  • 原文地址:https://www.cnblogs.com/summer-blog/p/6030885.html
Copyright © 2011-2022 走看看