Iphone 在通用应用程序中为ipad使用@2x视网膜图像?苹果更喜欢本地应用程序吗?
我知道有一些讨论,但我找不到好的答案 我的问题是-Iphone 在通用应用程序中为ipad使用@2x视网膜图像?苹果更喜欢本地应用程序吗?,iphone,ipad,universal-binary,Iphone,Ipad,Universal Binary,我知道有一些讨论,但我找不到好的答案 我的问题是- 我知道- [UIImage imageNamed:@"blabla"] 将自动搜索要在iPhone上显示的正确图像(视网膜或非视网膜) 我有一个通用应用程序,我希望在ipad上使用@2x版本,这样我就不必加载其他版本的图像(我有数百张小图像) 可能吗 我在一些地方看到人们写道,苹果不鼓励通用应用程序,因为它更喜欢为iPhone和iPad构建独立的应用程序?即使我为每个用户创建了不同的UI,这是否正确 谢谢 shani没有一种好的内置
[UIImage imageNamed:@"blabla"]
- 我在一些地方看到人们写道,苹果不鼓励通用应用程序,因为它更喜欢为iPhone和iPad构建独立的应用程序?即使我为每个用户创建了不同的UI,这是否正确
shani没有一种好的内置方式可以不在iPad上复制高分辨率的iphone视网膜图像。您可以编写自己的UIImage扩展或子类,该扩展或子类使用用户界面习惯用法宏来确定您的平台,然后自动将“@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"]
也许您可以复制所有图像资源image@2x.png到image~ipad.png。 注意“~ipad.png”的情况。
但是您必须使用Cap手动管理拉伸图像(StretchableMagewithLeftCapWidth:topCapHeight:)。我通过检查视网膜图像是否存在,改进了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]];
}
如果您正在加载名为“image”的图像,则搜索路径可能与以前相同: iPhone:
- (一)image@2x~iphone.png(仅限视网膜)
- (二)image@2x.png(仅限视网膜)
- 3) image~iphone.png
- 4) image.png
- (一)image@2x~ipad.png(仅限视网膜)
- (二)image@2x.png(仅限视网膜)
- 3) image~ipad.png
- 4) image.png