2x图像无法在视网膜设备上工作

时间:2012-12-10 19:46:51

标签: objective-c ios cocoa-touch

我有一个具有以下命名约定的图像。 它始终显示视网膜设备上的非2x版本。 我从派生数据中删除了缓存图像但仍未显示。 如果我明确地将imageNamed设置为“Back”,它可以工作 这些是图像。 Back@2x.png Back.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 个答案:

答案 0 :(得分:1)

尝试

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

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

答案 1 :(得分:0)

您不应在imageNamed:parameter中指定.png

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

UIImage *backImage = [UIImage imageNamed:@"Back"];

答案 2 :(得分:0)

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

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

使这如此方便的原因是它不仅自动确定是否使用图像的@ 2x版本,而且当您拥有本地化文件时,它还提供当前用户区域设置的文件路径。这很方便,因为本地化文件不在主目录中,而是在它们自己的子文件夹中(例如,英文本地化文件在@“en.lproj”子文件夹中),并且按名称调用它们是一件麻烦事,因为你需要完整的道路。这个方法为你找到了路径。

答案 3 :(得分:0)

@凯勒的回答应该有效。你确定你使用的是png图像吗?