美文网首页
Read Book 获取分页数据

Read Book 获取分页数据

作者: CodingTom | 来源:发表于2020-05-14 17:40 被阅读0次
   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
    }

相关文章

网友评论

      本文标题:Read Book 获取分页数据

      本文链接:https://www.haomeiwen.com/subject/fihxohtx.html