2015-11-02 141 views
0

我正在研究一个有很多图形的应用程序。该应用针对iOS 7+的iPhone,因此所有支持它的设备都具有视网膜显示屏。我只添加了@ 2x和@ 3x图形,因为@ 1x图形永远不会被使用,而且我不希望包的大小增加得多。@ 2x图像资产没有@ 1x资产

我最加载程序的映像:

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

这应该加载[email protected]为@ 2倍显示器和[email protected]为iPhone 6加。

不过,我注意到这种行为:

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

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

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

+0

当您的应用程序在iPad 2上运行时,您需要1x图像。 – rmaddy

+0

错误在于听不到您所听到的内容... – matt

+0

我在听,但我也在使用资产目录。 – calvillo

回答

1

忽略1x图像并没有什么错,实际上对于仅iPhone应用程序(因为没有单分辨率iPhone设备可以运行此系统)通常这样做。问题是你的代码。特别是,这条线是错误的:

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

你有两个选择:

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

    [self.imageView setImage:[UIImage imageNamed:@"ButtonOn.jpg"]]; 
    
  • 更妙,只需保留它的样子,然后使用资产目录而不是具有滑稽的@2x名称的单个文件。

编辑:根据您的意见,并在你的问题的细节,我不得不说,你是深深的困惑您是否正在使用的资产类别。你说你是,但是在那种情况下,说[UIImage imageNamed:@"[email protected]"]不起作用 - 而你说它确实有效。很明显,你仍然有这个文件坐在你的应用程序包的顶层。这是你的问题的一部分。您需要从应用程序包中删除这些图像文件,并在资产目录上依靠完全

+0

我正在使用资产目录。除非我还添加1张图像,否则不会加载2张图像。 – calvillo

+0

“除非我还添加1张图片,否则不会加载2张图片”这只是不正确。我一直这样做。如果您使用的是资产目录,则名称“@”[email protected]“'不应该工作。我不得不建议你 - 你正在使用资产目录,但也许你不是。显然你仍然有名字的图像文件仍然在你的应用程序包中。你需要删除这些。我已经修改了我的回答,提到这一点。 – matt

+0

我发誓我只使用资产目录= P。我保留了命名约定,因为如果您使用命名约定将图像拖入资产目录中,Xcode会自动将它们置于正确的屏幕密度。我注意到这个问题不是我描述的问题。真正的问题是,除非我添加.jpg扩展名,否则图像不会被加载......我不知道这是否与它们不是PNG的事实有关。 – calvillo