//根據(jù)指定的大小,對字符串進行分頁,計算出每頁顯示的字符串區(qū)間(NSRange)
- (NSArray *)pageRangeArrayWithConstrainedToSize: (CGSize)size
{
NSAttributedString *attributedString = self;
NSMutableArray * resultRange = [NSMutableArray array];
CGRect rect = CGRectMake(0, 0, size.width, size.height);
// 以下方法耗時 基本再 0.5s 以內(nèi)
// NSDate * date = [NSDate date];
NSInteger rangeIndex = 0;//剩余的字數(shù)
do {
NSUInteger length = MIN(600, attributedString.length - rangeIndex);
NSAttributedString * childString = [attributedString attributedSubstringFromRange:NSMakeRange(rangeIndex, length)];
CTFramesetterRef childFramesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef) childString);
UIBezierPath * bezierPath = [UIBezierPath bezierPathWithRect:rect];
CTFrameRef frame = CTFramesetterCreateFrame(childFramesetter, CFRangeMake(0, 0), bezierPath.CGPath, NULL);
CFRange range = CTFrameGetVisibleStringRange(frame);
NSRange r = {rangeIndex, range.length};
if (r.length > 0) {
[resultRange addObject:[NSValue valueWithRange:r]];
}
rangeIndex += r.length;
CFRelease(frame);
CFRelease(childFramesetter);
} while (rangeIndex < attributedString.length && attributedString.length > 0);
//NSTimeInterval millionSecond = [[NSDate date] timeIntervalSinceDate:date];
//NSLog(@"耗時 %lf", millionSecond);
return resultRange;
}