background image

            rangeOfPages = (NSRange *)malloc(referTotalPages*sizeof(NSRange));
            memset(rangeOfPages, 0x0, referTotalPages*sizeof(NSRange));
            
            // 页面索引
            int page = 0;
            
            for (NSUInteger location = 0; location < textLength; ) {
                // 先计算临界点(尺寸刚刚超过 UILabel 尺寸时的文本串)
                NSRange range = NSMakeRange(location, referCharatersPerPage);
                
                // reach end of text ?
                NSString *pageText;
                CGSize pageTextSize;
                
                while (range.location + range.length < textLength) {
                    pageText = [text substringWithRange:range];
                    
                                       pageTextSize  =  [pageText  sizeWithFont:[UIFont 
systemFontOfSize:FONT_SIZE_MAX]
                                                                                constrainedToSize:CGSizeMake(textLabel.frame.size.width, 
CGFLOAT_MAX)
                                            lineBreakMode:UILineBreakModeWordWrap];
                    
                    if (pageTextSize.height > textLabel.frame.size.height) {
                        break;
                    }
                    else {
                        range.length += referCharatersPerPage;
                    }
                }
                
                if (range.location + range.length >= textLength) {
                    range.length = textLength - range.location;
                }
                
                // 然后一个个缩短字符串的长度,当缩短后的字符串尺寸小于 textLabel 的尺寸时
即为满足
                while (range.length > 0) {
                    pageText = [text substringWithRange:range];
                    
                                       pageTextSize  =  [pageText  sizeWithFont:[UIFont 
systemFontOfSize:FONT_SIZE_MAX]
                                                                                constrainedToSize:CGSizeMake(textLabel.frame.size.width, 
CGFLOAT_MAX)