我差不多已经完成了构建我的第一个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图像?这太棒了!我觉得我必须不正确地理解这一点。
答案 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)
这些是您的背景图片所需的不同分辨率。