我在NSTextStorage
中有一个很长的文字(可能是普通的书,比如> 200页)。
我以这种方式为textContainers分发此文本:
let textStorageLength = defaultTextStorage?.length ?? 0
while layoutManager!.textContainer(forGlyphAt: textStorageLength - 1,
effectiveRange: nil) == nil {
let textContainer = NSTextContainer(size: textContainerSize)
layoutManager!.addTextContainer(textContainer)
pagesCount += 1
}
然后我在pageViewController上将这个容器用于textViews。
我有一些标记为:
func selectTappableWordsFromList(_ list: [PositionWithWord]) {
self.defaultTextStorage?.beginEditing()
list.forEach {
if !self.shouldInterruptCurrentProcesses {
self.markWordInDefaultTextStorage(positionWithWord: $0)
} else {
self.shouldInterruptCurrentProcesses = false
self.defaultTextStorage?.endEditing()
return
}
}
self.defaultTextStorage?.endEditing()
}
func markWordInDefaultTextStorage(positionWithWord: PositionWithWord) {
let range = NSMakeRange(positionWithWord.position!.start,
positionWithWord.position!.length)
defaultTextStorage?.addAttributes(defaultAttributes, range: range)
}
let defaultAttributes: [NSAttributedStringKey: Any] = [
.underlineStyle: NSUnderlineStyle.styleSingle.rawValue,
.underlineColor: UIColor.BookReader.underline
]
问题是:在整个文本存储中标记单词的速度非常慢。书中的页面越多,它的工作就越慢。
还有来自探查器的cpu使用截图。
任何提高逻辑的方法?