我创建了一个在xcode 5上完美运行的应用程序。但是当我在带有iphone 6模拟器的xcode 6上运行它时,会出现以下错误:
CUICatalog:找不到名称为someImage@2x~ipad.png,比例因子为2,设备类型为568的渲染。
我知道这可能不是你想要的答案,但我曾经遇到过完全相同的问题,只需将图片名称更改即可解决该问题。
换句话说,我将原始文件复制到同一目录中的另一个文件中,并将其命名为不同的名称。
然后我将这个新文件添加到Xcode项目中并删除了第一个文件。
我修改了代码以反映新图像的名称:
// Asset Catalog problem loading this:
// [imgBackground setImage:[UIImage imageNamed:@"Home_BG@5g.png"]];
[imgBackground setImage:[UIImage imageNamed:@"Home_BG-568h"]];
Home_BG-568h@2x.png
。我发现了一种规避苹果命名约定解释的加载图片方法。不要使用[UIImage imageNamed:]
,而是将图片作为二进制数据加载到NSData
中,然后用该数据初始化UIImage
,如下所示:
NSData* imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon@57x57" ofType:@"png"]];
UIImage* icon = [UIImage imageWithData:imageData];
需要注意的是,使用这种方法不会进行缓存,多次调用将每次加载新的图片。如果需要缓存,必须自行实现逻辑。
另外,图片的比例可能也不正确。如果是retina比例(@2x)的图片,可以像下面这样调整加载后的图片的比例:
icon = [UIImage imageWithCGImage:icon.CGImage scale:2.f orientation:UIImageOrientationUp];
我在我的通用应用项目中也遇到了同样的问题。
解决方案是将所有在两个或一个设备上使用的“通用图像”重命名(iPhone&& iPad || iPhone || iPad)。例如,someimage@2x.png,因为不存在也不需要对应项...
Icon@57x57.png
等等。重命名它们是完全不切实际的。在 iOS 8 之前,这一切都运作得非常完美。 - devios1