Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS 7.0 UITextView在添加图像后获取速度非常慢_Ios_Uitextview - Fatal编程技术网

iOS 7.0 UITextView在添加图像后获取速度非常慢

iOS 7.0 UITextView在添加图像后获取速度非常慢,ios,uitextview,Ios,Uitextview,我试图在ios7及更高版本中使用UITextView制作一个文本编辑器,但我遇到了一些可怕的错误。我已经讨论了许多与文本视图滚动相关的堆栈溢出问题。但我找不到的主要问题是,在添加了NSTEXTATTACH(自定义)之后,文本的呈现速度很慢。我正在使用这篇文章中描述的方法: 但是在添加图像后,文本的输入速度变得非常慢。代码与文章中描述的几乎相同,因此我没有将其粘贴到这里。原因可以如以下问题所述: DrawGlyphsForglypRange运行N*2次,其中N是次数 你的台词已经包装好了。”

我试图在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的图像缩放非常小,所以不太可能成为一个大问题——对视网膜来说可能不是。