Swift 慢速NSAttribute字符串呈现
我正在开发一个用于文本编辑的应用程序,当我输入超过10000时,该应用程序的速度非常慢。我在打字时运行了一些for循环,但这应该是一件大事。是否可以在向下滚动时加载文本、分块或其他内容?如调度等?我正在使用NSAttribute字符串Swift 慢速NSAttribute字符串呈现,swift,string,performance,rendering,Swift,String,Performance,Rendering,我正在开发一个用于文本编辑的应用程序,当我输入超过10000时,该应用程序的速度非常慢。我在打字时运行了一些for循环,但这应该是一件大事。是否可以在向下滚动时加载文本、分块或其他内容?如调度等?我正在使用NSAttribute字符串 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool
{
textView.textStorage.addAttribute(NSForegroundColorAttributeName, value: styles.titleTextColor().withAlphaComponent(0.10), range: NSMakeRange(0, textView.attributedText.length))
let textRange: UITextRange? = textView.tokenizer.rangeEnclosingPosition((textView.selectedTextRange?.start)!, with: UITextGranularity.sentence, inDirection: 1)
if textRange != nil
{
let sentenceRange = textView.rangeFromTextRange(textRange: textRange!)
textView.textStorage.addAttribute(NSForegroundColorAttributeName, value: styles.titleTextColor().withAlphaComponent(1), range: sentenceRange)
}
}
extension UITextView
{
func rangeFromTextRange(textRange: UITextRange) -> NSRange
{
let location : Int = self.offset(from: self.beginningOfDocument, to: textRange.start)
let length : Int = self.offset(from: textRange.start, to: textRange.end)
return NSMakeRange(location, length)
}
你能分享你的代码吗<代码>分派和
延迟加载
可以是一个答案,但如果没有您的代码,我无法判断哪一个有效。@Rahul我更新了我的问题,请检查我是否收到此错误错误:类型为“UITextView”的值没有成员“rangeFromTextRange”让sentenceRange=textView.rangeFromTextRange(textRange:textRange!)^~~~~~~~~~~~~~~~~~~~~~
这意味着textView没有任何成员作为rangeFromTextRange
。我想您正在寻找selectedRange
extension UITextView{func range fromtextrange(textRange:uitextange)->NSRange{let location:Int=self.offset(from:self.beginingofdocument,to:textRange.start)let length:Int=self.offset(from:textRange.start,to:textRange.end)return NSMakeRange(location,length)}我无法找出确切的问题,但我想到的一个解决方案是在调度队列中放置两个操作。DispatchQueue.main.async{let sentenceRange=textView.rangeFromTextRange(textRange:textRange!)textView.textStorage.addAttribute(NSForegroundColorAttributeName,值:styles.titleTextColor().withAlphaComponent(1),range:sentenceRange)}