假设我想要一个图像为320x100点的视网膜屏幕,我将需要制作一个640x200像素的图像并命名为@ 2x。问题是当我从大小为640x200像素的Web服务下载图像时。通常情况下,@ 2x图像会在手机中转换为320x100点,但来自网络服务的图像仍然是640x200点。
注意 - 网络服务是我自己的,所以我可以解决它,如果它是网络服务的问题。
对不起如果可能没有说明问题,但这就是我的意思(类似): Retina display and [UIImage initWithData]
答案 0 :(得分:1)
您必须手动设置控件的高度和宽度,它会自动显示DPI较高的图像而不会不必要地缩小尺寸。
答案 1 :(得分:0)
如果没有通过imageNamed加载,@ 2x图像将始终是非视网膜图像尺寸的两倍。
在视网膜和非视网膜设备上创建这样的图像:
UIImage *anImage = [UIImage imageNamed: @"anImageName"];
NSLog(@"%@: scale: %f", NSStringFromCGSize(anImage.size), anImage.scale);
在视网膜设备上打印的CGSize对象将与非视网膜图像的大小相同,但将比例设置为2.0。
使用显式视网膜后缀创建图像将显示图像实际上是两倍大 - 因此imageNamed会自己进行图像缩放。
对于要在已创建和调整大小的图像视图中显示此内容的情况,您仍然无需执行任何操作 - 只需将其直接加载即可,图像视图会将图像调整为正确的大小。
但是,如果你想创建一个新的图像视图,那么你需要创建一个框架,注意UIScreen的分辨率(不幸的是,你不能只将scale属性设置为只读) :
CGRect newFrame = CGRectZero;
newFrame.size.width = (anImage.size.width / [UIScreen mainScreen].scale);
newFrame.size.height = (anImage.size.height / [UIScreen mainScreen].scale);
这假设您的网络服务意识到设备的屏幕是否是视网膜;有些服务会自动提取,有些会要求你事先告诉他们。 YMMV。