NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:endStr];
if (model.title.length > 0) {
[attr setFont:[UIFont fontWithName:@"Helvetica-Bold" size:14]];
}
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef) attr);
CGPathRef path = CGPathCreateWithRect(bounds, NULL);
CFRange range = CFRangeMake(0, 0);
NSUInteger rangeOffset = 0;
do {
CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(rangeOffset, 0), path, NULL);
range = CTFrameGetVisibleStringRange(frame);
rangeOffset += range.length;
[self.pageArr addObject:@(range.location)];
if (frame) {
CFRelease(frame);
}
} while (range.location + range.length < attr.length);
if (path) {
CFRelease(path);
}
if (frameSetter) {
CFRelease(frameSetter);
}
// pageCount = self.pageArr.count;
// attributedString = attr.mutableCopy;
- (NSArray<NSAttributedString *> *)getPageStringArray
{
CGSize pgaeSize = CGSizeMake(100, 200);
NSString *content = @"";
NSMutableArray *pageArray = [NSMutableArray array];
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:content];
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:attributeString];
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
[textStorage addLayoutManager:layoutManager];
NSInteger i = 0;
while (YES) {
i++;
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:pgaeSize];
textContainer.lineFragmentPadding = 0;
[layoutManager addTextContainer:textContainer];
NSRange rang = [layoutManager glyphRangeForTextContainer:textContainer];
if (rang.length <= 0) {
break;
}
NSString *str = [content substringWithRange:rang];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:str];
[pageArray addObject:attributedString];
}
return pageArray;
}
/// 获得内容分页列表
/// - Parameters: - attrString: 内容 - rect: 显示范围
/// - Returns: 内容分页列表
class func pagingRanges(attrString:NSAttributedString, rect:CGRect) ->[NSRange] {
var rangeArray = [NSRange]()
let framesetter = CTFramesetterCreateWithAttributedString(attrString as CFAttributedString)
let path = CGPath(rect: rect, transform: nil)
var range = CFRangeMake(0, 0)
var rangeOffset = 0
repeat{
let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(rangeOffset, 0), path, nil)
range = CTFrameGetVisibleStringRange(frame)
rangeArray.append(NSMakeRange(rangeOffset, range.length))
rangeOffset += range.length
}while(range.location + range.length < attrString.length)
return rangeArray
}
网友评论