iOS视网膜显示:图像双倍大小

为了testing不/视网膜显示,我创build了一个大小为100×100的UIView。

我创build了2个图像: – 正常大小(100×100) – 视网膜大小(200×200)

我有两种情况:1)非视网膜显示+背景中的普通尺寸图像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]; } 

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

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

您不需要编写IS_RETINAtesting代码,只需在包含要用于视网膜显示的图像的文件名称中添加@ 2x后缀,iOS就会自动使用该后缀。

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

 #define IMG_NAVIGATION_BAR_BACKGROUND prettyNavBarBackground 

那么你可以使用这个单一的调用,iOS将select适当的选项

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

你不必写任何代码来区分视网膜和普通硬件。 你只需要添加一个“@ 2x”的图像。 这将工作得很好。

你不必单独调用这些图像,而只需要编写文件名。