我有一个具有以下命名约定的图像。 它始终显示视网膜设备上的非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;
答案 0 :(得分:1)
尝试
[UIImage imageNamed:@"Back.png"];
此外,请确保图像的两个版本都列在Target-> Build Phases-> Copy Bundle Resources下。如果不是@ 2x版本,请确保在导入时选中“复制到目标组的文件夹(如果需要)”框。
答案 1 :(得分:0)
您不应在imageNamed:parameter中指定.png
。
示例:文件应为名称Back.png
和Back@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图像吗?