For testing not/retina display I’ve created an UIView with size 100×100.
I’ve create 2 images:
– normal size (100×100)
– retina size (200×200)
I have two situations:
1) Non-Retina display + Normal Size image in background
2) Retina display + Retina Size image in background
The 1st scenario is ok.
In the 2nd scenario the image is double size and in my UIView I can see only 1/4 of the total image.
The same happens when I try to assign a background image to my UIViewController navigation bar as following:
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];
}
There’s a much easier way to do this. Give the retina version of the image the same name as the non-retina version, except with a “@2x” at the end. For example, if your regular image was named
foo.png, then the retina version should be namedfoo@2x.png.Then, just refer to the regular version of the filename (e.g.,
foo.png) at all times. When your app is running on non-retina hardware the regular image will be used, but whenever you’re on retina hardware the higher-resolution image will be used automatically. It’s easier than having to write an if statement for every image you use, plus it’ll actually work.