iOS:使用正确的视网膜显示比例因子,从加载的图像为UIImageView设置图像

iOS:使用正确的视网膜显示比例因子,从加载的图像为UIImageView设置图像,ios,uiimageview,uiimage,scale,retina-display,Ios,Uiimageview,Uiimage,Scale,Retina Display,我正在研究带有视网膜显示器的iOS设备。基本上,我有一个UIImageView,通过在文档文件夹中加载一个jpeg图像来设置它的图像 比如说,UIImageView的大小为100x100个点。jpeg图像的尺寸为200x200像素。据我所知,jpeg图像应在UIImageView中查看,无需任何缩放。我把jpeg图像读为 NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomai

我正在研究带有视网膜显示器的iOS设备。基本上,我有一个
UIImageView
,通过在文档文件夹中加载一个jpeg图像来设置它的图像

比如说,
UIImageView
的大小为100x100个点。jpeg图像的尺寸为200x200像素。据我所知,jpeg图像应在
UIImageView
中查看,无需任何缩放。我把jpeg图像读为

NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];            
NSString *jpegFilePath = [NSString stringWithFormat:@"%@/im_%d_%d.jpeg",docDir, dbPhotoId, i];
UIImage* tmpImage = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@", jpegFilePath]];
UIImage*tmpImage
的比例因子为1,宽度和高度分别为200和200(从
tmpImage.scale
tmpImage.size.width
tmpImage.size.height
观察)


在这种情况下,如果我将
UIImageView
(尺寸为100x100点)的图像属性设置为
tmpImage
,我是否可以安全地假设不会出现任何缩放或视网膜显示问题?

这取决于图像视图的
contentMode
属性的值。如果该值为
UIViewContentModeScaleToFill
,则图像在视网膜显示器上看起来会很好,但这不是正确的方法


最好有两个版本的图像,一个用于正常显示,另一个用于视网膜,如前所述。

你永远无法安全地假设任何事情。永远测试!在我的特定应用程序中,加载的jpeg图像只是为捕获的照片而保存的图像。因此,图像将始终用于视网膜或非视网膜显示。在这种情况下,我认为没有必要保存两个版本的图像。所以接下来的问题是:对于唯一的视网膜场景,使用@2x修改器保存图像是否更好?或者它没有什么区别?是的,我认为最好用@2x modifier保存图像,这样你就不用担心大小了。或者,您可以通过调用
initWithCGImage:scale:orientation:
并将
[[UIScreen mainScreen]scale]
作为缩放值,从现有图像创建一个新的
UIImage
。这是因为代码设计更清晰/更简单,还是因为这样可以更好地提高性能(例如,渲染图像的计算)会更好吗?