ReadViewSDK/Sources/RDReaderView/EPUBTextRendering/RDEPUBTextPaginationSupport.swift
2026-05-21 19:40:51 +08:00

35 lines
1.2 KiB
Swift

import CoreText
import UIKit
extension NSAttributedString {
func ss_pageRanges(size: CGSize) -> [NSRange] {
var ranges: [NSRange] = []
let framesetter = CTFramesetterCreateWithAttributedString(self)
let path = CGPath(rect: CGRect(origin: .zero, size: size), transform: nil)
var visibleRange = CFRangeMake(0, 0)
var location = 0
while visibleRange.location + visibleRange.length < length {
let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(location, 0), path, nil)
visibleRange = CTFrameGetVisibleStringRange(frame)
guard visibleRange.length > 0 else {
break
}
ranges.append(NSRange(location: location, length: visibleRange.length))
location += visibleRange.length
}
return ranges
}
}
extension UIColor {
var ss_cssString: String {
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
getRed(&red, green: &green, blue: &blue, alpha: &alpha)
return String(format: "rgba(%d, %d, %d, %.3f)", Int(red * 255), Int(green * 255), Int(blue * 255), alpha)
}
}