如果你想支持iPhone 6/Plus的本地分辨率,你需要添加启动图像(iOS 8之前)或启动屏幕xib(iOS 8)。iPhone 4/4S:640 x 960,iPhone 5/5S:640 x 1136,iPhone 6:750 x 1334,iPhont 6 Plus:1242 x 2208。这意味着如果你想要支持这些设备,你需要准备4个具有上述分辨率的启动图像。你可以使用iOS模拟器来捕获不同分辨率的截图。如果找不到特定分辨率的启动图像,则你的应用程序将在新分辨率设备上运行在兼容模式下。兼容模式意味着当仍然具有相同的逻辑大小时,你的视图将被缩放以适应新的屏幕尺寸。
编辑:我认为操作者误解了@2x和@3x的含义。iPhone 6的分辨率是750(像素)x 1334(像素),326像素每英寸。这是真实分辨率。如果支持本地分辨率,则375(点)x 667(点)是逻辑大小。iPhone 6 Plus的分辨率为1242(像素)x 2208(像素),401像素每英寸,逻辑大小为414(点)x 736(点)。
这是在iOS设备上使用不同分辨率的图像的工作原理:假设你想在iPhone 4s,iPhone 5/5S,iPhone 6/Plus上运行应用程序。首先,你应该提供4个启动图像以支持这些设备的本地分辨率。当iOS启动你的应用程序时,它将检查应用程序是否提供了正确的启动图像来支持当前设备的本地分辨率。如果iOS找到它,则在启动时使用它,屏幕的逻辑大小是正确的,你的应用程序会正常运行。否则,你的应用程序将在兼容模式下运行,在此模式下,所有视图都将被缩放。
假设你的应用中有一张名为
foo.png
的图片,其逻辑尺寸为
100(points) x 100(points)
。你希望在所有设备上该图片看起来都一样。因此,你需要提供两个版本的这张图片。其中一个是
200(pixels) x 200 (pixels)
的,并且应该被命名为
foo.png@2x
;另一个是
300(pixels) x 300(pixels)
的,并且命名为
foo.png@3x
。如果你使用
[UIImage imageNamed:@"foo"]
来加载该图片,在iPhone 6 plus以外的设备上,应用程序将会加载名为
foo.png@2x
的图片。否则,应用程序将会加载
foo.png@3x
并将其缩小到300 * 84%(pixels) x 300 * 84%(pixels)的大小。
如果你从URL加载一张图片并需要在运行时渲染它,假设你得到的尺寸为
{width:100, height:100}
,缩放比例为
1.0
。这意味着这张图片的
实际尺寸为
100 * 1.0(pixels) x 100 * 1.0(pixels)
。如果你不想让它被缩放,你需要自己计算逻辑尺寸。你可以像这样计算:
UIImage *image = ...
CGFloat scale = [UIScreen mainScreen].scale;
CGFloat width = image.size.width / scale;
CGFloat height = image.size.height / scale;
CGRect frame = CGRectMake(50.0f, 50.0f, width, height)];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame];
imageView.contentMode = UIViewContentModeCenter;
imageView.image = image;
[self.view addSubview:imageView];
@2x
和@3x
图片,不需要基础图片吗? - temporary_user_name