tem*_*ame 6 size screen screen-resolution screen-size ios
我差不多已经完成了构建我的第一个iPhone应用程序,并试图添加背景图像,并且发现它有点令人困惑,因为现在不同的iPhone版本中有3个或4个不同大小的屏幕,具有不同的启动分辨率.
因此,虽然我知道整件事image@2x.png,但我仍然不知道我真正需要什么.如果我想让我的应用程序在iPhone 4/4s,5s/5c,6/6 +上运行,我需要多少个不同版本的背景图像,以及尺寸和分辨率是多少?
我已经google了,并没有找到任何最新的2014年的有凝聚力的答案.
此外,如果iPhone 6是1334x750 @ 3x,这是否意味着我应该包括4002x2250背景?然后是1920x1080 iPhone 6+ @ 3x,5760 x 3240图像?这太棒了!我觉得我必须正确理解这一点.
我认为,要做到这一点最简单的方法是使用适合于iPhone 6+,然后简单地设置图像UIImageView的contentMode到UIViewContentModeCenter.我认为这至少是一个,结果应该是在iPhone 6+上你有一个居中的图像,但在其他屏幕上你只是得到一部分图像.
iPhone 6+的下采样意味着覆盖整个屏幕的@ 3x资产应该是2208x1242(也就是说,这个分辨率已经是3倍."真正的"分辨率是736x414).这是所需的最大分辨率,然后您可以使用我描述的方法为@ 2x和@ 1x资产使用相同的图像.
如果要支持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模拟器捕获具有不同分辨率的屏幕截图.compatibility mode如果找不到特定分辨率的启动图像,您的应用将在新的分辨率设备上运行.compatibility mode表示当仍具有相同的逻辑大小时,您的视图将缩放以适应新的屏幕大小.
编辑:
我认为op误解了做什么@2x和@3x意味着什么.iPhone 6的分辨率是750(pixels) x 1334(pixels), 326 pixels per inch.这是真正的分辨率.并且375(points) x 667(points)是如果支持初始分辨率下的逻辑大小.iPhone 6 Plus的分辨率1242(pixels) x 2208(pixels), 401 pixels per inch和逻辑大小是414(points) x 736(points).
这是具有不同分辨率的图像在iOS设备上的工作方式:
假设你想在iPhone 4s,iPhone 5/5S,iPhone 6/plus上运行你的应用程序.您应该做的第一件事是提供4个启动图像以支持这些设备的原始分辨率.当iOS启动您的应用程序时,它将检查应用程序是否提供正确的启动映像以支持当前设备的本机分辨率.如果iOS找到它,那么在启动时使用它并且屏幕的逻辑大小是正确的,您的应用程序正常运行.否则,您的应用将运行,compatibility mode其中将缩放所有视图.
假设foo.png您的应用程序中有一个逻辑大小为的图像100(points) x 100(points).您希望此图像在上述所有设备中看起来都相同.您应该提供此图像的2个版本.一个是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%(像素)x 300*84%(像素).
如果从URL加载图像并需要在运行时呈现它.假设你得到的尺寸是{width:100, height:100},尺度是1.0.这意味着REAL此图像的大小是100 * 1.0(pixels) x 100 * 1.0(pixels.如果您不希望它被缩放,您需要自己计算逻辑大小.你这样做:
UIImage *image = ... // you get it from an url
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];
Run Code Online (Sandbox Code Playgroud)