仅视网膜设备的图像名称?
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"。
希望这会有所帮助。
【讨论】:
以上是关于仅视网膜设备的图像名称?的主要内容,如果未能解决你的问题,请参考以下文章