我正在使用以下代码从网络服务器下载图像,以便在iOS应用程序的表格视图中显示:
NSURL *url = [NSURL URLWithString:[imageArray objectAtIndex:indexPath.row]];
UIImage *myImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
cell.imageView.image = myImage;
图像视图是60x60占位符,120x120用于视网膜显示。我将假设用户有一个iPhone 4.但是,如果我将图像大小调整为120x120它不能解决问题,它对于imageview来说太大了。如果我将图像大小设置为60x60,在网络服务器上,则图像适合但有点模糊。有谁知道如何解决这个问题?
谢谢!
答案 0 :(得分:4)
我们首先同意您的UIImageView
为60x60 积分,表示标准显示器为60x60 像素,而120x120 像素为视网膜显示。
对于60x60点的UIImageView
,图像应为60x60像素,比例1.0 用于标准显示,120x120像素比例2.0 用于视网膜显示。这意味着您的UIImage
应始终具有60x60点的size
,但根据显示分辨率应具有不同的scale
。
从服务器获取图像数据时,首先应检查设备屏幕的比例,然后请求相应的图像大小(以像素为单位),如下所示:
if ([UIScreen mainScreen].scale == 1.0) {
// Build URL for 60x60 pixels image
}
else {
// Build URL for 120x120 pixels image
}
然后,您应该将图片数据放在UIImage
大小为60x60
个点的适当scale
处:
NSData *imageData = [NSData dataWithContentsOfURL:url];
CFDataRef cfdata = CFDataCreate(NULL, [imageData bytes], [imageData length]);
CGDataProviderRef imageDataProvider = CGDataProviderCreateWithCFData (cfdata);
CGImageRef imageRef = CGImageCreateWithJPEGDataProvider(imageDataProvider, NULL, true, kCGRenderingIntentDefault);
UIImage *image = [[UIImage alloc] initWithCGImage:imageRef
scale:[UIScreen mainScreen].scale
orientation:UIImageOrientationUp];
CFRelease (imageRef);
CFRelease (imageDataProvider);
CFRelease(cfdata);
希望这会有所帮助。
答案 1 :(得分:0)
如果您下载的图片尺寸与UIImageView尺寸相差2倍。 iPhone4中的视网膜显示效果很好。
另见:http://mobile.tutsplus.com/tutorials/iphone/preparing-your-iphone-app-for-higher-resolutions/
答案 2 :(得分:0)
从网络下载的图像未针对Retina Display格式化,与您的应用程序捆绑的图像(使用“@ 2x”后缀)相同。
您可以使用恰当命名的scale:和setScale:方法来获取/设置任何UIView的比例,以帮助您更好地显示来自网络的内容,如果您知道它适用于Retina显示设备。
答案 3 :(得分:0)
答案很简单:
我建议始终从服务器下载双密度图像(因为非视网膜显示的用户非常少)并在图像视图中进行设置。
您没有正确执行的操作是您没有将imageView设置为自动适合内容。 您可以通过选择ImageView并将contentMode(模式)设置为缩放为Fill,或者通过代码在IB中执行此操作:
imageView.contentMode = UIViewContentModeScaleToFill;