首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从iOS 8框架加载映像

从iOS 8框架加载映像
EN

Stack Overflow用户
提问于 2014-09-09 08:18:41
回答 5查看 26.9K关注 0票数 33

我正在尝试从我正在编写的iOS 8框架中加载一个图像(用Swift语言)。我用的是Xcode 6 Beta 6

如果映像存储在框架的Images.xcassets中,则此代码无法工作(即加载映像)

代码语言:javascript
复制
let image = UIImage(named: "Background.png")

如果映像存储在主机应用程序(使用框架)的Images.xcassets中,则图像将正确加载(从框架内的代码)。

我可以看到框架的Images.xcassets包含在Copy Bundle Resources阶段。

我还使用一个故事板文件作为框架中的一个资源;这将正确地加载。

为了避免与主机应用程序发生某种命名冲突,我尝试重命名框架的Images.xcassets,但这也不起作用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-11-10 18:20:57

虽然@Renatus的答案是完全有效的,并且解决了核心问题(需要指定用于框架的包),但我想发布我所使用的解决方案,因为它稍微直接一些:

SWIFT3.0/4.0/5.0

代码语言:javascript
复制
let image = UIImage(named: "YourImage", in: Bundle(for: YOURFRAMEWORKCLASS.self), compatibleWith: nil)

或者,您可以将此模式用于非class,也就是非“静态”函数:

代码语言:javascript
复制
let image = UIImage(named: "YourImage", in: Bundle(for: type(of: self)), compatibleWith: nil)

或者class函数的这种模式:

代码语言:javascript
复制
let image = UIImage(named: "YourImage", in: Bundle(for: self), compatibleWith: nil)

这些替代品更适合切割和粘贴。

票数 72
EN

Stack Overflow用户

发布于 2014-11-09 12:39:03

UIImage(名:"Background.png")在内部调用NSBundle.mainBundle()。因此,您的代码试图在宿主应用程序包中找到资源,而不是在框架包中。要从框架的包中加载UIImage,请使用以下代码片段:

代码语言:javascript
复制
let frameworkBundle = NSBundle(forClass: YOURFRAMEWORKCLASS.self)
let imagePath = frameworkBundle.pathForResource("yourImage.png", ofType: "")
if imagePath != nil {
  result = UIImage(contentsOfFile: imagePath!)
}

编辑:添加解释(thx到milz)

票数 13
EN

Stack Overflow用户

发布于 2016-09-25 10:20:54

在Swift 3.0中:

代码语言:javascript
复制
let currentBundle = Bundle(for: YOURCLASS.self)
guard let path = currentBundle.path(forResource: imageName, ofType: "jpg") else {  return defaultImage }
return UIImage(contentsOfFile: path) ?? defaultImage
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25739762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档