iOS 7.0 UITextView在添加图像后获取速度非常慢
我试图在ios7及更高版本中使用UITextView制作一个文本编辑器,但我遇到了一些可怕的错误。我已经讨论了许多与文本视图滚动相关的堆栈溢出问题。但我找不到的主要问题是,在添加了NSTEXTATTACH(自定义)之后,文本的呈现速度很慢。我正在使用这篇文章中描述的方法: 但是在添加图像后,文本的输入速度变得非常慢。代码与文章中描述的几乎相同,因此我没有将其粘贴到这里。原因可以如以下问题所述: DrawGlyphsForglypRange运行N*2次,其中N是次数 你的台词已经包装好了。”iOS 7.0 UITextView在添加图像后获取速度非常慢,ios,uitextview,Ios,Uitextview,我试图在ios7及更高版本中使用UITextView制作一个文本编辑器,但我遇到了一些可怕的错误。我已经讨论了许多与文本视图滚动相关的堆栈溢出问题。但我找不到的主要问题是,在添加了NSTEXTATTACH(自定义)之后,文本的呈现速度很慢。我正在使用这篇文章中描述的方法: 但是在添加图像后,文本的输入速度变得非常慢。代码与文章中描述的几乎相同,因此我没有将其粘贴到这里。原因可以如以下问题所述: DrawGlyphsForglypRange运行N*2次,其中N是次数 你的台词已经包装好了。”
但我不确定。有什么建议可以解决这个非常缓慢的文本呈现问题吗?我通过使用下面的代码在添加时缩放图像来解决这个问题
-(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)插入图像:(UIImage*)图像
{
NSTextAttachment*attachment=[[NSTextAttachment alloc]initWithData:UIImageJPEG表示(图像,0.0),类型:@“图像/jpeg”];
浮动比例因子=1.0;
CGSize imageSize=[图像大小];
浮动宽度=self.frame.size.width;
如果(宽度<图像大小.宽度)
scalingFactor=(宽度)*scalingFactor/imageSize.width;
CGRect rect=CGRectMake(0,0,imageSize.width*缩放因子,imageSize.height*缩放因子);
attachment.image=[self-imageWithImage:image-scaledToSize:rect.size];
attachment.bounds=[self-scaleImageSizeToWidth:self.frame.size.width withImage:image];
NSRange range=[自选范围];
NSAttributedString*attachmentchar=
[NSAttributedString attributedStringWithAttachment:attachment];
[[self-textStorage]InsertAttributeString:attachmentchar-atIndex:range.location];
}
我注意到使用-(void)textStorage:(NSTextStorage*)textStorage将进行编辑:(NSTextStorageEditActions)editedMask range:(NSRange)editedRange changeInLength:(NSInteger)增量和枚举附件的文本存储并用自定义的nstextattachment子类替换它们是无效的,并且会大大降低渲染速度。这种方法将原始粘贴的图像替换为缩放后的图像,因此在其他设备上尝试使用此属性字符串时,您将拥有可能会丢失原始图像质量。根据您的要求,您可能仍然可以在此处(而不是在willProcessEditing中)使用自定义附件路径,但保留原始图像以及设备的缩放图像。有点像缩略图。这里的缺点是存储空间增加,但iPhone的图像缩放非常小,所以不太可能成为一个大问题——对视网膜来说可能不是。