保存UIImage为NSData时的缩放问题



我想将一些图像保存为nsdata到一个plist中,稍后检索它。但是我遇到了一个问题。

问题是,如果UIImage的比例是2.0,当我稍后用 再次加载它时
[UIImage imageWithData:]

图片显示2倍大小

我想要的是喜欢

的行为
[UIImage imageNamed:]

将根据屏幕比例加载。

我该怎么做?

我最终解决了这个代码:

UIImage *image = [UIImage imageWithData:imageData];
if (isRetinaDisplay)  {
    image = [UIImage imageWithCGImage:[image CGImage] scale:2.0f orientation:UIImageOrientationUp];
}

你可以考虑屏幕是Retina这样的可能性:

CGFloat screenScale = [UIScreen mainScreen].scale;
UIImage *image = [UIImage imageWithData:data scale:screenScale];

这段代码在一行中涵盖了两种情况(Retina/非Retina)。

从iOS 6开始你也可以使用

+ (UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale NS_AVAILABLE_IOS(6_0);

scale属性是只读的,但你能做的是子类UIImageView使它可写(或使它自动根据它运行的设备)。

// ImageView.h
@interface ImageView : UIImageView
// ImageView.m
CGFloat scaleProperty = 1.0;
@implementation ImageView
- (void)setScale:(CGFloat)scale
{
    scaleProperty = scale;
}
- (CGFloat)scale
{
    return scaleProperty;
}
@end

最新更新