【问题标题】:Use @2x retina images for ipad in universal app? and does apple prefer native apps?在通用应用程序中为 ipad 使用@2x 视网膜图像?苹果更喜欢原生应用程序吗?
【发布时间】:2011-02-23 09:18:56
【问题描述】:

我知道有一些关于这个的讨论,但我找不到好的答案?

我的问题是 -

  1. 我知道-

      [UIImage imageNamed:@"blabla"]
    

将自动搜索要在 iPhone 上显示的正确图像(视网膜或非视网膜)。

我有一个通用应用程序,我希望在 ipad 上使用 @2x 版本,这样我就不必加载其他版本的图像(我有数百个小图像)。

有可能吗?

  • 我在某些地方看到人们写道,苹果不鼓励通用应用程序,因为它更喜欢为 iPhone 和 iPad 构建独立的应用程序?即使我为每个人创建不同的用户界面,这是否正确?

谢谢

沙尼

【问题讨论】:

  • 为什么 Apple 更喜欢不同的 iPad 和 iPhone 应用程序?作为用户,通用应用程序对我更有吸引力。
  • 这就是为什么我在决定使用通用应用程序时想的原因,但我在某些地方看到了它,只是想确定一下

标签: iphone ipad universal-binary


【解决方案1】:

如果您正在加载名为“image”的图片,搜索路径可能与以往相同:

iPhone:

  • 1) image@2x~iphone.png(仅限视网膜)
  • 2) image@2x.png(仅限视网膜)
  • 3) 图片~iphone.png
  • 4) 图像.png

iPad:

  • 1) image@2x~ipad.png(仅限视网膜)
  • 2) image@2x.png(仅限视网膜)
  • 3) 图像~ipad.png
  • 4) 图像.png

【讨论】:

  • 如果可行,这应该是选定的答案。这太棒了。当然,您可能要注意这仅适用于 4.0+。 stackoverflow.com/a/5535913/362730
  • 另外 - 这意味着如果您有常规 iPhone 尺寸、Retina iPhone 尺寸和常规 iPad 图形,那么 Retina iPad 会更喜欢在常规 iPad 图形之前加载 Retina iPhone 图形?
  • 在 iPhone 中有什么区别:1) image@2x~iphone.png (retina only) 2) image@2x.png (retina only)
  • @JohannaVL 如果是这样,那么它们的大小是多少。 image~ipad.png & image@2x~ipad.png(仅限视网膜)用于 44 x 44 px > 1x 图像?
【解决方案2】:

没有很好的内置方法可以不为 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"]

【讨论】:

  • 嘿,我的错误。事实上,那是我的第一次尝试。但我很愚蠢地尝试在我仍然没有@2x 图像的观点上尝试它。感谢任何方式:)
  • 太好了,谢谢!刚刚添加了我的第一个类扩展,它就像发条一样工作 :-) 只需在第二个 return 语句的末尾添加一个 ]。
  • 谢谢! (只是一个小观察:该方法应该是类方法,而不是实例方法:p)
  • @ragnarius 是的,重点是让它在旧 ipad 上运行。我想,对于新的视网膜 ipad,需要一种稍微不同的方法。
  • 这个问题是在 ipad 没有视网膜的时候提出的,开发人员通常希望对视网膜 iPhone 和非视网膜 ipad 使用相同的图稿。对于这种情况,它仍然有效——对 iphone 和非视网膜 ipad 使用相同的文件。对于retina ipad,大概你想要新的艺术作品,并且需要调整例程以添加“-ipad ...@2x”或任何你用来命名你的ipad视网膜图像的东西。
【解决方案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]];
}

【讨论】:

    【解决方案4】:

    也许您可以将所有图像资源 image@2x.png 复制到 image~ipad.png。 请注意“~ipad.png”的情况。 但是你必须手动管理使用 Cap (stretchableImageWithLeftCapWidth: topCapHeight:) 的拉伸图像。

    【讨论】:

      猜你喜欢
      • 2012-08-27
      • 2012-06-03
      • 2012-09-10
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      相关资源
      最近更新 更多