1

我有一个具有以下命名约定的图像。它总是在视网膜设备上显示非 2x 版本。我已从派生数据中删除了缓存图像,但仍未显示。如果我明确地将 imageNamed 设置为“Back”,它就可以工作。这些是图像。返回@2x.png 返回.png

UIImage *backImage = [UIImage imageNamed:@"Back"];
NSLog(@"back image height %f",backImage.size.height);
NSLog(@"back image width %f",backImage.size.width);

UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeCustom];
[btnBack setImage:backImage forState:UIControlStateNormal];
btnBack.frame = CGRectMake(0, 0, backImage.size.width, backImage.size.height);
[btnBack addTarget:self action:@selector(Click_On_Btn_Back) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithCustomView:btnBack];
self.navigationItem.leftBarButtonItem = backBarButton;
4

4 回答 4

1

尝试

[UIImage imageNamed:@"Back.png"];

此外,确保映像的两个版本都列在 Target->Build Phases->Copy Bundle Resources 下。如果@2x 版本不是,请确保在导入它时选中“复制到目标组的文件夹(如果需要)”框。

于 2012-12-10T19:51:32.620 回答
0

@Keller 的回答应该有效。你确定你使用的是png图像。

于 2012-12-20T14:28:36.140 回答
0

您不应.png在 imageNamed: 参数中指定。

示例:文件应该是名称Back.pngBack@2x.png; 你的代码应该是

UIImage *backImage = [UIImage imageNamed:@"Back"];
于 2012-12-10T21:10:40.523 回答
0

这只是一种方法,但您可以从包中获取路径:

// in this example, we load test.png from the bundle
NSString *pathToResource = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"];

之所以如此方便,是因为它不仅会自动确定是否使用图像的@2x 版本,而且当您有本地化文件时,它会提供当前用户区域设置的文件路径。这很方便,因为本地化文件不在主目录中,而是在它们自己的子文件夹中(例如,英文本地化文件在 @"en.lproj" 子文件夹中),并且通过名称调用它们很麻烦,因为您需要完整路径。此方法为您获取路径。

于 2012-12-10T22:52:08.527 回答