如何使用Swift从资源文件中加载特定图片。

88

我是Swift的新手,我想从资源中加载一个特殊的图像。例如,我有:

image 1 for iphone 4s = green-square@2x.png
image 2 for iphone 5/5s = green-square-Retina@2x.png
image 3 for iphone 6s = green-square@3x.png

我想为iPhone 6加载特定的图片,就像这样

self.GSquare = SKSpriteNode(imageNamed: "./Images.xcassets/green-square-Retina@2x.png")

可以吗?


你只需要它是“green-square-Retina”。 - AdamPro13
不,它加载不了。我正在使用三个不同大小的图像。 - Ghost
您在Images.xcassets中的图像名称是什么? - Max B.
3个回答

148

不能直接使用@2x@3x加载图像,系统会自动选择适当的图像,只需使用UIImage指定名称即可:

UIImage(named: "green-square-Retina")

1
确保它存在并且具有 png 扩展名。 - Azat
是的,它存在并且自动加载到 iPhone 5/5s 上,但我也想在 iPhone 6 上使用它,因为 iPhone 6 加载 iPhone 4s 图像尺寸,所以我已经检测到当前屏幕大小,以便我可以知道当前使用的设备是 iPhone 6,然后我加载视网膜图像。 - Ghost
这是正确的行为,@3x 仅适用于 iPhone 6 Plus。如果您希望强制加载其他图像,请在运行时确定设备类型并使用另一个名称的不同图像,但这不是好的方法。 - Azat
2
这就是为什么我想知道是否有直接完成它的可能性,因为如果我为每个图像做另一个应用程序,我的应用程序将变得更重。 - Ghost
你的做法不太对。你不应该使用“Assets”并给每个图像起一个个人化的名称,如“imageName-2x”,然后手动管理图像加载。最好按照预期使用它。 - Azat
显示剩余2条评论

88
自从Swift 3.0开始,有更方便的方法:#imageLiterals。 这里 是文字示例。下面是此处的动画示例:

输入映像描述


1
提供最佳实践的唯一答案! - Rafa0809
8
截至2019年5月,您需要双击由“Image Literal”选项插入的符号。这将打开您的资产列表。 - oluckyman
6
也许只是我自己的感觉,但使用 #imageLiteral 会使代码变得难以阅读。 - JOM
在2023年和Xcode 15.0.1中,imageLiteral 字面上就是坏的。典型的Xcode开发者体验。 - undefined

5

您可以直接从资源包中获取图像,而无需使用UIImage(named: "green-square-Retina")

相反,直接从资源包中使用图像对象。
开始输入图像名称,您将获得实际图像的建议。这是一个可取的做法,也不容易出错。

请参考 Stackoverflow 答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接