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上使用@2x版本,这样我就不必加载其他版本的图像(我有数百张小图像)

    可能吗

    • 我在一些地方看到人们写道,苹果不鼓励通用应用程序,因为它更喜欢为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
    iPad:

    • (一)image@2x~ipad.png(仅限视网膜)
    • (二)image@2x.png(仅限视网膜)
    • 3) image~ipad.png
    • 4) image.png

    为什么苹果会喜欢不同的iPad和iPhone应用程序?作为一个用户,通用应用对我更具吸引力。这就是为什么我决定使用通用应用的原因,但我在一些地方看到了它,我只是想确认一下我的错误。事实上,这是我第一次尝试。但是我很愚蠢,在一个我仍然没有@2x图像的视图上尝试它。无论如何谢谢:)太好了,谢谢!刚刚添加了我的第一个类扩展,它的工作原理就像发条一样:-)只需在第二个返回语句的末尾添加一个]即可。谢谢!(只是一个小小的观察:该方法应该是类方法,而不是实例方法:p)@ragnarius是的,关键是让它在旧ipad上工作。我想,新的视网膜ipad需要一种稍微不同的方法。这个问题出现在ipad没有视网膜的时候,开发者通常希望在视网膜iphone和非视网膜ipad上使用相同的艺术品。它仍然适用于这种情况——对iphone和非ipad使用相同的文件。对于retina ipad,您可能需要新的艺术作品,并且需要调整例程以添加“-ipad…@2x”或您用于命名ipad retina图像的任何内容。如果这样做有效,这应该是选定的答案。这太棒了。当然,您可能需要注意,这只适用于4.0+。此外,这意味着,如果你有常规尺寸的iPhone、Retina iPhone和常规iPad图形,Retina iPad会在常规iPad图形之前加载Retina iPhone图形?iPhone中的区别是什么:1)image@2x~iphone.png(仅限视网膜)2)image@2x.png(仅限视网膜)@JohannaVL如果是这样的话,那么它们的大小是多少。图片~ipad.png&image@2x~ipad.png(仅限视网膜)用于44 x 44 px>1x图像?