开发者

Hi-Res @2x image not being picked up for tab bar item

I have a TabBarController that sets the image for the tab like so, in the -init method:

self.tabBarItem.image = [UIImage imageNamed:@"tabImage.png"];

I have a tabImage@2x.png file in the resource. In the iPhone 4 simulator or the phone, the hi-res image isn't being picked up - the low res version is simply being scaled up.

Any ideas why this might be?

EDIT: Some more info: If I try and explicitly use tabImage@2x.png (or just tabImage@2x) th开发者_开发技巧en the tab image I see is extremely large and blown up beyond the bounds of the tab, as if it's being scaled from 60px to 120px. So it looks like whatever name is supply is being treated as a scale=1.0 image.


Note that the simulator is not case-sensitive, but the device is. Make sure case matches EXACTLY. If you've changed the case of the filename at some point, you'll need to clean and rebuild. Sometimes, for the simulator, I've had to actually blow away the folder in Library/Application Support/iPhone Simulator/4.3/Applications/ to get the rebuild to pick up the renamed image.

Always use

 [UIImage imageNamed:@"foo.png"]

This will work on 3.x and 4.x devices, and on the 4.x Simulator. Devices with Retina Displays (and the 4.x simulator) will magically pick up the @2x versions of your images; iOS has been modified to be smart about this function and @2x.png files.

Make sure you have both the @2x.png and the normal.png added to the project file, and do a full clean & build. As others have mentioned, verify the size of the images, too; apparently if they're not exactly 2x the dimensions it won't work (I haven't verified this myself).

If you leave the .png off, it will only work on iOS 4.0. So if you're building a 4.0+ only app, you can ask for:

    [UIImage imageNamed:@"foo"]

If you have only one hi-res image and want to use it on both Retina and non-Retina devices, then you'll have to change view.contentMode to scale to fit.


I had the same problem. It turned out that my png was not square. Solution: make it square and it will work.


Are you sure the file has been added to the XCode project and is visible in the project explorer?


I had this problem as well.

Make 2 images:

  • 30x30 pixels
  • 60x60 pixels

Suffix the 60x60pixel image with @2x. For example, tabBarImage@2x.png. Then, in your storyboard or code, you can specify the regular one, tabBarImage.png, and iOS will choose the @2x version at its discretion.


You can leave the .png off now. I believe it will still work, but you may try that.


I just went through a few hours of redoing art in The Gimp and trying to get it recognized and loaded by my app on an iPhone 4.

I ran into the problem described with certain images with a @2x extension not being recognized and loaded.

I was not able to discern any pattern. My images are all loaded using [UIImage imageNamed:@"<name>.png"] into a singleton. I inspected the image scale settings post-startup and some were 1.0 (the old art) and some were 2.0 (the new art).

The only way I was able to resolve this problem was to delete and re-add the high resolution images that were not being recognized.


Two silly mistakes (both of which I've made before) that can cause this problem:

  1. Accidentally naming the small versions @2x instead of the large ones
  2. Having the large versions be slightly missized (by one pixel)


you need 2 versions of your images and both ned to be at the same location in the project folder and added to the project

image.png 60x60 image@2.png 120x120

then simply use [UIImage imageNamed:@"image.png"]

did it this way with selfmade buttons and it worked for me (iOS 4.1)


Another thing to look out for is having two images with the same name.


I had the same issue. The @2x image had the wrong build target checked (ServiceTests instead of MyProject).


I had exactly the same problem.

Make two images: im1.png and im1@2x.png Call imageNamed: with the first one.

Note, imageNamed: doesn't initialize UIImage, hence use it as transient [[UIImageView new] initWithImage:[UIImage imageNamed: @"im1.png"]] or initialize UIImage yourself.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜