我已经了解iOS app non-retina and retina images concept。
但是假设为视网膜设备创建的项目通常是图像名称应该是"myImageName@2x.png"
但是我可以将其用作"myImageName.png"
而不是"myImageName@2x.png"
吗?图像大小没有任何变化,只是更改了图像名称
"myImageName@2x.png"
致"myImageName.png"
。
是否有效?
答案 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中使用它,它就像这样: 如果我将其重命名为refresh@2x.png,则会显示:
手动加载图片
如果您按代码加载图片,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”。
希望这有帮助。