我正在尝试从我正在编写的iOS 8框架中加载图像(在Swift中).我正在使用Xcode 6 Beta 6
如果图像存储在我的框架中,则此代码不起作用(即加载图像)Images.xcassets:
let image = UIImage(named: "Background.png")
Run Code Online (Sandbox Code Playgroud)
如果图像存储在Images.xcassets主机应用程序(使用框架)中,则正确加载图像(从框架内的代码).
我可以看到框架Images.xcassets包含在Copy Bundle Resources阶段中.
我也使用故事板文件作为框架中的资源; 这适当加载.
我已经尝试重命名框架的Images.xcassets以避免与主机应用程序发生某种命名冲突,但这也不起作用.
Dan*_*iel 62
虽然@Renatus的答案是完全有效的并且解决了核心问题(需要指定框架的捆绑包),但我想发布我使用的解决方案,因为它稍微更直接:
Swift 3.0/4.0
let image = UIImage(named: "YourImage", in: Bundle(for: YOURFRAMEWORKCLASS.self), compatibleWith: nil)
Run Code Online (Sandbox Code Playgroud)
或者,您可以将此模式用于class非"非静态"函数:
let image = UIImage(named: "YourImage", in: Bundle(for: type(of: self)), compatibleWith: nil)
Run Code Online (Sandbox Code Playgroud)
或这种class功能模式:
let image = UIImage(named: "YourImage", in: Bundle(for: self), compatibleWith: nil)
Run Code Online (Sandbox Code Playgroud)
这些替代品更适合切割和粘贴.
Ren*_*tus 12
UIImage(名为:"Background.png")在内部调用NSBundle.mainBundle().因此,您的代码正在尝试在主机应用程序的包中找到资源,而不是在框架包中.要从框架的包中加载UIImage,请使用以下代码段:
let frameworkBundle = NSBundle(forClass: YOURFRAMEWORKCLASS.self)
let imagePath = frameworkBundle.pathForResource("yourImage.png", ofType: "")
if imagePath != nil {
result = UIImage(contentsOfFile: imagePath!)
}
Run Code Online (Sandbox Code Playgroud)
编辑:补充说明(thx to milz)
| 归档时间: |
|
| 查看次数: |
22793 次 |
| 最近记录: |