2x 图像在视网膜设备上不起作用



我有一个具有以下命名约定的图像。它始终在视网膜设备上显示非 2x 版本。我已经从派生数据中删除了缓存图像,但仍然没有显示。如果我明确地将图像命名为"返回",它就可以工作这些是图像。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;

尝试

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

此外,请确保映像的两个版本都列在"目标>构建阶段 ->复制捆绑资源"下。如果@2x版本不是,请确保在导入时选中"复制到目标组的文件夹(如果需要)"框。

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

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

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

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

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

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

@Keller的答案应该有效。 您确定使用的是 PNG 图像吗?

最新更新