Ios7 iOS 7 UITextView:重新打开应用程序后,nstextattachment的大小将增加2倍

Ios7 iOS 7 UITextView:重新打开应用程序后,nstextattachment的大小将增加2倍,ios7,uitextview,textkit,nslayoutmanager,nstextattachment,Ios7,Uitextview,Textkit,Nslayoutmanager,Nstextattachment,我正在使用ios7中的文本工具包构建一个注释编辑器。早些时候,我在渲染自定义大小的NSTextAttachment时遇到了问题,因为这会大大降低渲染速度。我通过缩放图像并将其添加到textview解决了这个问题。您可以在中找到我的答案 缩放图像后,textview渲染运行正常,没有任何延迟。textview的属性文本存储在核心数据中。在应用程序的运行会话期间,textview正确显示图像。即使将属性文本保存在核心数据中并再次检索以在textview上显示,图像看起来不错。但在关闭应用程序并再次运

我正在使用ios7中的文本工具包构建一个注释编辑器。早些时候,我在渲染自定义大小的NSTextAttachment时遇到了问题,因为这会大大降低渲染速度。我通过缩放图像并将其添加到textview解决了这个问题。您可以在中找到我的答案 缩放图像后,textview渲染运行正常,没有任何延迟。textview的属性文本存储在核心数据中。在应用程序的运行会话期间,textview正确显示图像。即使将属性文本保存在核心数据中并再次检索以在textview上显示,图像看起来不错。但在关闭应用程序并再次运行应用程序后,图像会放大到2倍大小。在缩放图像时,我使用了以下功能并使用[[UIScreen bounds]scale]来保持图像质量

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {

     UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}
如果将图像缩放到1.0,图像不会展开,但图像质量非常差

我认为问题出在哪里? 问题在于布局管理器

我尝试过的 我尝试过子类化NSLayoutManager并重写 -(无效)绘图图示符RGLYPHRANGE:(NSRange)图示符显示起点:(CGPoint)原点 我看到的是,在运行应用程序的新会话时,附件大小会加倍。如果我尝试检查附件大小并调整其大小,则会再次出现延迟。 我很长时间以来一直被这个问题困扰着。如有任何建议,我将不胜感激。
原因可能是视网膜显示吗?如果是视网膜,您可能需要在存储之前将大小减小50%。试试这个怎么样:-

 //Original Size that you want to store
CGSize imageSize = CGSizeMake(320.0f, 320.0f);

//Make the image 50% of the size for retina
if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&([UIScreen mainScreen].scale == 2.0)) {
    // Retina display
    imageSize = CGSizeMake(160.0f, 160.0f);
}

UIImage * storeImage = [self imageWithImage:self.image scaledToSize:imageSize]
//TODO: Store this image locally or whatever you want to do.

我想你可以试试这个。

你是如何存储图像的?您执行的缩放是否可能导致您正在修改附件中的原始图像,并在下次再次缩放时进行修改。第三次运行应用程序时会发生什么?应用程序如何知道何时不缩放图像?也许在图像附件中设置了一些附加属性,让应用程序知道不要缩放图像。1)我将完整的NSAttributedString存储在核心数据中。2)是的,这可能是原因。应用程序在第三次运行或运行后的行为相同3)从我阅读的其他问题来看,默认NSTextAttachment的大小为图像作为它的边界。这有助于我解决问题,如果我用子类对象替换NSTextattachment的实例,我会观察到一个延迟。你在iphone上观察到类似的情况了吗?还是只有我观察到了?下载iWalletFree并测试它,看你是否得到同样的延迟。
@interface MMTextAttachment : NSTextAttachment
{
}
@end
@implementation MMTextAttachment
//I want my emoticon has the same size with line's height
- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex NS_AVAILABLE_IOS(7_0)
{
return CGRectMake( 0 , 0 , lineFrag.size.height , lineFrag.size.height );
}
@end