0

假设我希望视网膜屏幕的图像为 320x100 点,我必须制作 640x200 像素的图像并将其命名为 @2x。问题是当我从大小为 640x200 像素的 Web 服务下载图像时。通常,@2x 图像会在手机中转换为 320x100 点大小,但来自 Web 服务的图像仍然是 640x200 点。

注意 - 网络服务是我自己的,所以如果是网络服务的问题,我可以修复它。

对不起,如果可能没有很好地表达问题,但这就是我的意思(类似): Retina display and [UIImage initWithData]

4

2 回答 2

1

您必须手动设置控件的高度和宽度(以磅为单位),它会自动显示具有更高 DPI 的图像,而无需进行不必要的缩小。

于 2013-05-30T14:20:21.263 回答
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。

于 2013-05-30T14:24:53.313 回答