我知道有一些关于此的讨论,但我找不到好的答案?
我的问题是 -
我知道 -
[UIImage imageNamed:@"blabla"]
将自动搜索要在iPhone上显示的正确图像(视网膜或非视网膜)。
我有一个通用应用程序,我希望在ipad上使用@ 2x版本,所以我不必加载其他版本的图像(我有数百个小图像)。
有可能吗?
感谢
SHANI
答案 0 :(得分:66)
如果您要加载名为“image”的图片,搜索路径可能与以往一样:
iPhone:
ipad公司:
答案 1 :(得分:17)
没有很好的内置方法可以不为iPad复制更高级别的视频网络图像。您可以编写自己的UIImage扩展或子类,使用用户界面idiom宏来确定您的平台,然后自动将“@ 2x”附加到图像名称:
+ (UIImage *) imageNamedSmart:(NSString *)name
{
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
return [UIImage imageNamed:[NSString stringWithFormat:@"%@@2x.png", name]];
return [UIImage imageNamed:[NSString stringWithFormat:@"%@.png", name]];
}
你会这样称呼它:
[UIImage imageNamedSmart:@"myImage"]
答案 2 :(得分:3)
我通过检查视网膜图像是否存在改进了Bogatyr的答案。可能没有过分必要,但我发现它在测试时很有用,所以我可以创建一个图像文件。
+ (UIImage *) imageNamedSmart:(NSString *)name {
NSFileManager *fileManager = [[[NSFileManager alloc] init] autorelease];
NSString *retinaFileName = [NSString stringWithFormat:@"%@@2x", name];
NSString *filePath = [[NSBundle mainBundle] pathForResource:retinaFileName ofType:@"png"];
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && [fileManager fileExistsAtPath:filePath]) {
return [UIImage imageNamed:[retinaFileName stringByAppendingString:@".png"]];
}
return [UIImage imageNamed:[NSString stringWithFormat:@"%@.png", name]];
}
答案 3 :(得分:0)
也许你可以将所有图片资源image@2x.png复制到image~ipad.png。 注意“~ipad.png”的情况。 但您必须使用Cap(stretchableImageWithLeftCapWidth:topCapHeight :)手动管理拉伸图像。