在做小說閱讀器時掏膏,每章節(jié)的內(nèi)容有很多文字焦蘑,如果我們直接把章節(jié)的內(nèi)容顯示出來用戶體驗肯定不好抽减,為此需要我們把章節(jié)內(nèi)容分成幾頁去顯示,每頁的文字正好鋪滿我們設定的區(qū)域兔沃。
下面的代碼是用CoreText做的分頁計算:
NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:_contentText];
[str addAttributes:[self attributesWithFont:_contentFont] range:NSMakeRange(0, str.length)];
CFAttributedStringRef cfAttStr = (__bridge CFAttributedStringRef)str;
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(cfAttStr);
int textPos = 0;
NSInteger totalPage = 0;
NSUInteger strLength = [str length];
while (textPos < strLength) {
//設置路徑
CGPathRef path = CGPathCreateWithRect(CGRectMake(0, 0, _textRenderSize.width, _textRenderSize.height), NULL);
//生成frame
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(textPos, 0), path, NULL);
//獲取范圍并轉(zhuǎn)換為NSRange
CFRange frameRange = CTFrameGetVisibleStringRange(frame);
NSRange range = NSMakeRange(frameRange.location, frameRange.length);
//以NSString形式保存
[array addObject:NSStringFromRange(range)];
//移動當前文本位置
textPos += frameRange.length;
CFRelease(frame);
CGPathRelease(path);
totalPage++;
//釋放路徑和frame蒋得,頁數(shù)加1
}
CFRelease(framesetter);
代碼中只設置了文本的字號。
簡易小說閱讀器這是我沒事的時候?qū)懙恼呈埃斎贿€沒寫完窄锅,如果你有興趣也可以加入進來。