如何支持截至2014年的各种iphone屏幕尺寸?

时间:2014-12-05 06:51:52

标签: ios size screen screen-resolution screen-size

我差不多已经完成了构建我的第一个iPhone应用程序,并试图添加背景图像,并且发现它有点令人困惑,因为现在在不同的iPhone版本中有3个或4个不同大小的屏幕,具有不同的分辨率引导。

所以虽然我知道整个image@2x.png的事情,但我仍然不知道我真正需要什么。如果我想让我的应用程序在iPhone 4 / 4s,5s / 5c,6/6 +上运行,我需要多少个不同版本的背景图像,以及尺寸和分辨率是多少?

我已经四处寻找,并且在2014年没有找到任何有凝聚力的答案。

此外,如果iPhone 6是1334x750 @ 3x,这是否意味着我应该包含4002x2250背景?然后是1920x1080 iPhone 6+ @ 3x,5760 x 3240图像?这太棒了!我觉得我必须不正确地理解这一点。

5 个答案:

答案 0 :(得分:5)

我认为最简单的方法是使用适合iPhone 6+的图片,然后只需将UIImageView' contentMode设置为UIViewContentModeCenter即可。我认为至少这一点,结果应该是在iPhone 6+上你有一个居中的图像,但在其他屏幕上你只是得到一部分图像。

iPhone 6+的下采样意味着覆盖整个屏幕的@ 3x资产应该是2208x1242(也就是说,这个分​​辨率已经是3倍。"真实"分辨率是736x414)。这是所需的最大分辨率,然后您可以使用我描述的方法为@ 2x和@ 1x资产使用相同的图像。

答案 1 :(得分:5)

如果您想支持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表示您的视图将缩放,以便在仍具有相同逻辑大小时适合新的屏幕大小。

修改

我认为我误解了@2x@3x的含义。 iPhone 6的分辨率为750(pixels) x 1334(pixels), 326 pixels per inch。这是 REAL 分辨率。如果支持原生分辨率,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%(像素)。

如果您从网址加载图片并需要在运行时渲染它。我们假设您获得的尺寸为{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];

答案 2 :(得分:2)

您将需要三个版本的背景图像(1x,2x,3x)。使用正确大小的图像的一个好习惯是制作尺寸为视图大小3倍的图像然后制作缩小2x和1x版本。

Apple推出了一个名为' Size Classes'支持不同的设备尺寸。要使用尺寸类,您需要最新版本的Xcode(Xcode 6)。在界面构建器中,您可以为不同的大小类设置不同的约束集。这样,支持所有屏幕尺寸变得更加容易。要了解有关大小类的更多信息,请观看WWDC 2014视频"使用UIKit构建自适应应用程序"。

答案 3 :(得分:1)

您使用的是哪种游戏引擎? 如果您使用的是cocos2d或cocos2dx,则可以使用960 * 640的背景图像。下面的代码将根据屏幕大小缩放图像。

CCSize frameSize = pEGLView->getFrameSize();
    CCSize designSize = CCSizeMake(480, 320);
    vector<string> searchPaths;

    CCSize resourceSize;

    Utility :: isPad = true;
    searchPaths.push_back("hd");
    resourceSize = CCSizeMake(960, 640);

    CCEGLView::sharedOpenGLView()->setDesignResolutionSize(designSize.width , designSize.height, kResolutionExactFit);
    pDirector->setContentScaleFactor(resourceSize.width/designSize.width); 

答案 4 :(得分:0)

这些是您的背景图片所需的不同分辨率。

  1. iPhone 4 / 4S - 640 * 960
  2. iPhone 5 / 5S - 640 * 1136
  3. iPhone 6 - 750 x 1334 for portrait 1334 x 750 for landscape
  4. iPhone 6 Plus - 1242 x 2208 for portrait 2208 x 1242 for landscape