我正在开发一款拥有大量图片的应用。该应用程序针对iOS 7+的iPhone,因此支持它的所有设备都有视网膜显示器。我只添加了@ 2x和@ 3x图形,因为永远不会使用@ 1x图形,并且我不希望捆绑的大小增长超过它。
我以编程方式加载了大部分图片:
[self.imageView setImage:[UIImage imageNamed:@"ButtonOn"]];
这应该为@ 2x显示加载ButtonOn@2x.jpg
,为iPhone 6 plus加载ButtonOn@3x.jpg
。
但是,我注意到了这种行为:
[UIImage imageNamed:@"ButtonOn@2x.jpg"]
,但这违背了命名约定的目的,它也迫使我通过以下方式检测屏幕密度:自己。有没有办法让@ 2x和@ 3x图像没有@ 1x图像?
更新:问题与屏幕密度无关。问题是,由于我使用JPG图形而不是PNG图形,Xcode无法找到它们,除非我使用文件的全名扩展名。也许这是一个错误。
答案 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"]
不起作用 - 你说它确实有效。很明显,您仍然将此文件放在应用包的顶层。这是你问题的一部分。您需要从应用包中删除这些图像文件,并在资产目录中单独使用 。