background image

实现

 iPhone 电子书的分页显示功能的代码

    制作 iPhone 电子书时,如果把大段文字放在 UITextView 或 UILabel 里显示,是不能分页
的,阅读时就像再看一大卷滚不到头的纸带,用户体验很差。下面这段代码可以实现

 

UILabel 尺寸固定,根据文本内容和字体动态分页显示,电子书方面的应用应该非常有用。 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //
    totalPages = 0;
    currentPage = 0;
    
    //
    textLabel.numberOfLines = 0;
    
    //
    if (!text) {
        // 从文件里加载文本串
        [self loadString];
        
        // 计算文本串的大小尺寸
        CGSize totalTextSize = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE_MAX]
                                                                                  constrainedToSize:CGSizeMake(textLabel.frame.size.width, 
CGFLOAT_MAX)
                                    lineBreakMode:UILineBreakModeWordWrap];

        // 如果一页就能显示完,直接显示所有文本串即可。
        if (totalTextSize.height < textLabel.frame.size.height) {
            textLabel.text = text;
        }
        else {
            // 计算理想状态下的页面数量和每页所显示的字符数量,只是拿来作为参考值用而
已!
            NSUInteger textLength = [text length];
            referTotalPages = (int)totalTextSize.height/(int)textLabel.frame.size.height+1;
            referCharatersPerPage = textLength/referTotalPages;
            
            // 申请最终保存页面 NSRange 信息的数组缓冲区
            int maxPages = referTotalPages;