仅视网膜设备的图像名称?

Posted

技术标签:

【中文标题】仅视网膜设备的图像名称?【英文标题】:Image name for only retina device? 【发布时间】:2014-03-26 05:01:36 【问题描述】:

我已经知道ios app non-retina and retina images concept。 但是假设为视网膜设备创建的项目通常图像名称应该是 "myImageName@2x.png" 但我可以将它用作 "myImageName.png" 而不是 "myImageName@2x.png" 吗?图像大小没有任何变化,只是改变了图像的名称 "myImageName@2x.png""myImageName.png"

有效还是无效?

【问题讨论】:

developer.apple.com/library/ios/recipes/… 【参考方案1】:

不,如果您为视网膜设备创建应用程序,则不能使用“myImageName.png”代替“myImageName@2x.png”,因为要支持ratina设备,您必须具有图像名称“myImageName@2x.png” ”。

如果您使用“myImageName.png”而不是“myImageName@2x.png”,那么苹果认为此 UI 部分仅适用于非视网膜显示设备。

【讨论】:

Apple 不检查图像的大小,它会考虑图像名称的命名约定。 如果“苹果认为这个 UI 部分只为非视网膜显示设备实现”怎么办? UI 部分看起来会有所不同吗? 好的..你有任何文件/链接/教程,苹果建议你这么说吗? Aad 真的很感谢你给我的建议,再次感谢。 :) developer.apple.com/library/ios/documentation/iPhone/Conceptual/… @KudoCC:UI 部分看起来没有什么不同,但苹果创建了图像命名约定。【参考方案2】:

我将在两种情况下进行演示。

xib 中的图片

如果你在 xib 中使用图像,它会检查图像的文件名,如果它有 @2x 后缀,它的大小将除以 2。我这里有一个例子。我有一个名为 refresh.png 的图像,如果它的大小为 40*40 像素,如果我在 xib 中使用它,它会呈现如下: 如果我将它重命名为 refresh@2x.png,它会出现:

手动加载图片

如果您通过代码加载图像,UIImage 的属性scale 会告诉您发生了什么。

@property(nonatomic, readonly) CGFloat scale Discussion 如果你加载一个 来自名称包含 @2x 修饰符的文件的图像,比例为 设置为 2.0。您还可以在以下情况下指定显式比例因子 从 Core Graphics 图像初始化图像。所有其他图像都是 假设比例因子为 1.0。

如果你乘以图像的逻辑大小(存储在大小 属性)通过此属性中的值,您可以获得 以像素为单位的图像。

结论:回答你的问题,答案显然是没有。我认为重要的是像素和点之间的区别。在非视网膜设备上,一个点是一个像素,在视网膜设备上,一个点是 2*2 像素。在我的示例中,Xib 将根据其size 属性排列图像(这反映了图像的逻辑大小,在 ios 4.0 及更高版本中以点为单位测量。)。如果您的图像为 40*40 像素且没有@2x 后缀,则其大小将为 40*40 点,其比例将为 1.0。如果用@2x 后缀重命名它,它的大小将为20*20 点,比例为2.0。

Retina 设备的图片资源以@2x 后缀命名是一种约定俗成的做法,所以就照着做吧,不然就麻烦了。

More about imageNamed: method 、scale and size property of UIImage here.

【讨论】:

很好的解释伙伴.. 如果 OP 在视网膜设备中使用refresh.png 那么有多少机会拒绝苹果的应用程序? @iPatel 很难说,如果用户界面看起来不错,也许苹果不在乎。【参考方案3】:

关于视网膜/非视网膜的事情不是图像的名称,而是图像的大小。当您为您的应用程序创建图像时,您应该为每个图像提供两种尺寸:带有@2x 后缀的图像应该是“正常”图像的两倍尺寸(没有@2x 后缀)。否则,如果两者具有相同的大小,那么拥有两个不同的图像是没有意义的。如果您在视网膜设备中创建图像,那么您的原始图像应以@2x 后缀命名,然后您应将图像缩小并不带@2x 后缀保存。

之后,当您想要加载图像时,例如使用 [NSImage imageNamed:imageName],您应该提供不带扩展名且不带后缀的图像名称:[NSImage imageNamed:@"myName"]。然后,应用程序将根据设备类型选择适当的文件。文件名为“myName.png”和“myName@2x.png”,但不要调用 [NSImage imageNamed:@"myName.png"] 或 [NSImage imageNamed:@"myName@2x.png"。

希望这会有所帮助。

【讨论】:

以上是关于仅视网膜设备的图像名称?的主要内容,如果未能解决你的问题,请参考以下文章

资产目录中设备特定图像集中的设备

来自 URL 视网膜大小的 iOS 图像?

iPhone 应用程序:视网膜显示的图像未显示

UIImage imageNamed:不会自动选择视网膜@2x 图像

UITabbar ios的背景图

iOS SDWebImage - 如何正确处理不同设备上的视网膜图像?