我想将一些图像保存为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