iOS Retina显示屏:双倍尺寸的图像

时间:2012-02-20 20:40:40

标签: iphone ios retina-display

为了测试不是/ retina显示,我创建了一个大小为100x100的UIView。

我创建了2张图片: - 正常尺寸(100x100) - 视网膜尺寸(200x200)

我有两种情况: 1)非Retina显示+背景中的正常尺寸图像 2)视网膜显示+背景中的视网膜尺寸图像

第一种情况还可以。 在第二种情况下,图像是双倍尺寸,在我的UIView中,我只能看到总图像的1/4。

当我尝试将背景图像分配给我的UIViewController导航栏时,会发生同样的情况,如下所示:

if (IS_RETINA()) {
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND_RETINA] forBarMetrics:UIBarMetricsDefault];
}
else {
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND] forBarMetrics:UIBarMetricsDefault];
}

3 个答案:

答案 0 :(得分:36)

有一种更简单的方法可以做到这一点。给图像的视网膜版本与非视网膜版本同名,除了最后的“@ 2x”。例如,如果您的常规图片名为foo.png,则视网膜版本应命名为foo@2x.png

然后,请始终参考文件名的常规版本(例如foo.png)。当您的应用程序在非视网膜硬件上运行时,将使用常规图像,但无论何时使用视网膜硬件,都将自动使用更高分辨率的图像。它比为你使用的每个图像编写一个if语句更容易,而且它实际上可以工作。

答案 1 :(得分:2)

您不需要对IS_RETINA测试进行编码,只需将@ 2x后缀添加到包含您要用于视网膜显示的图像的文件名称,iOS将自动优先使用它。

捆绑2个图像文件,prettyNavBarBackground.png和prettyNavBarBackground@2x.png

#define IMG_NAVIGATION_BAR_BACKGROUND prettyNavBarBackground

然后您可以使用此单个调用,iOS将选择适当的选项

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND] forBarMetrics:UIBarMetricsDefault];

答案 2 :(得分:0)

您不必编写任何代码来区分视网膜和正常硬件。你只需要添加一个“@ 2x”图像。这将完美无缺。

您不必单独调用这些图像,只需编写文件名即可。