拥有没有@ 1x资产的{2x图像资产

时间:2015-11-02 15:49:53

标签: ios objective-c iphone uiimage

我正在开发一款拥有大量图片的应用。该应用程序针对iOS 7+的iPhone,因此支持它的所有设备都有视网膜显示器。我只添加了@ 2x和@ 3x图形,因为永远不会使用@ 1x图形,并且我不希望捆绑的大小增长超过它。

我以编程方式加载了大部分图片:

[self.imageView setImage:[UIImage imageNamed:@"ButtonOn"]];

这应该为@ 2x显示加载ButtonOn@2x.jpg,为iPhone 6 plus加载ButtonOn@3x.jpg

但是,我注意到了这种行为:

  • iPhone 6 Plus会加载@ 3x图像。
  • 但其他iPhone - 4,4s,5s和6,不加载@ 2x。
  • 我可以强制它使用图形全名加载@ 2x图像,例如:[UIImage imageNamed:@"ButtonOn@2x.jpg"],但这违背了命名约定的目的,它也迫使我通过以下方式检测屏幕密度:自己。

有没有办法让@ 2x和@ 3x图像没有@ 1x图像?

更新:问题与屏幕密度无关。问题是,由于我使用JPG图形而不是PNG图形,Xcode无法找到它们,除非我使用文件的全名扩展名。也许这是一个错误。

1 个答案:

答案 0 :(得分:1)

省略1x图像没有任何问题,实际上通常只对iPhone应用程序这样做(因为没有单一分辨率的iPhone设备可以运行这个系统)。问题是你的代码。特别是,这一行是错误的:

[self.imageView setImage:[UIImage imageNamed:@"ButtonOn"]];

您有两种选择:

  • 这是一个 .jpg 文件,所以这样说:

    [self.imageView setImage:[UIImage imageNamed:@"ButtonOn.jpg"]];
    
  • 更好的是,只需按照您的方式保留它,并使用资产目录而不是具有有趣@2x名称的单个文件。

编辑:根据您的评论和问题中的详细信息,我不得不说您对是否使用资产目录感到非常困惑。你说你是,但在那种情况下,说[UIImage imageNamed:@"ButtonOn@2x.jpg"]不起作用 - 你说它确实有效。很明显,您仍然将此文件放在应用包的顶层。这是你问题的一部分。您需要从应用包中删除这些图像文件,并在资产目录中单独使用