我正在尝试在ios7及更高版本中使用UITextView制作文本编辑器,但我面临一些可怕的错误。我已经浏览了许多与文本视图滚动相关的Stack Overflow问题。但是,我无法找到的主要问题是在向其添加NSTextAttachment(Custom)之后文本呈现速度慢。我正在使用这篇文章中描述的方法:
但是在添加图像后,文本的输入变得非常慢。代码几乎与帖子中描述的相同,所以我没有粘贴在这里。原因可以如下面的问题所述: ios - iOS 7 UITextView is slow after typing lots of text
" drawGlyphsForGlyphRange运行N * 2次,其中N是次数 你的线条用词包装。"
但我不确定。是否有任何建议可以解决这种极慢的文本渲染问题?
答案 0 :(得分:1)
使用以下代码
添加时,我通过缩放图像来解决滞后问题-(void)insertImage:(UIImage *)image
{
NSTextAttachment* attachment = [[NSTextAttachment alloc] initWithData:UIImageJPEGRepresentation(image, 0.0) ofType:@"image/jpeg"];
float scalingFactor = 1.0;
CGSize imageSize = [image size];
float width = self.frame.size.width;
if (width < imageSize.width)
scalingFactor = (width)*scalingFactor / imageSize.width;
CGRect rect = CGRectMake(0, 0, imageSize.width*scalingFactor, imageSize.height *scalingFactor);
attachment.image = [self imageWithImage:image scaledToSize:rect.size];
attachment.bounds = [self scaleImageSizeToWidth:self.frame.size.width withImage:image];
NSRange range = [self selectedRange];
NSAttributedString* attachmentchar =
[NSAttributedString attributedStringWithAttachment:attachment];
[[self textStorage] insertAttributedString:attachmentchar atIndex:range.location];
}
我注意到使用 - (void)textStorage:(NSTextStorage *)textStorage willProcessEditing:(NSTextStorageEditActions)editedMask range:(NSRange)editedRange changeInLength:(NSInteger)delta 并枚举附件的文本存储并使用自定义nstextattachment子类替换它们并不高效,并且正在大大减慢渲染速度。