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

时间:2014-03-26 05:01:37

标签: ios iphone objective-c cocoa-touch

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

是否有效?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

我将在两种情况下演示它。

xib中的图片

如果在xib中使用图像,它将检查图像的文件名,如果它具有@ 2x后缀,则它的大小将除以2.我在这里有一个例子。我有一个名为refresh.png的图像,其大小如果是40 * 40像素,如果我在xib中使用它,它就像这样:enter image description here  如果我将其重命名为refresh@2x.png,则会显示:enter image description here

手动加载图片

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

  

@property(非原子,只读)CGFloat规模讨论如果你加载一个   来自名称中包含@ 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。

使用@ 2x后缀命名视网膜设备的图像资源是一种惯例,所以只需按照它或者你就会遇到麻烦。

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

答案 2 :(得分:0)

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

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

希望这有帮助。

相关问题