我的应用当前已被构造为使用动态库来实现代码重用。我将图像存储在动态库中,因此可以轻松在不同的应用程序目标之间共享它们。由于我可以使用UIImage(named:, in:, compatibleWith:)
初始化程序从动态库加载图像,因此在iOS上这可以正常工作。但是,该初始化程序似乎在watchOS上不可用。还有其他方法可以从watchOS的动态库(具有不同的捆绑包)加载图像。顺便说一下,图像存储在资产目录中。
答案 0 :(得分:2)
我发现的解决方法是使用Bundle
的{{1}}获取resourceURL
的资源文件夹的根目录,然后使用{ {1}}和Bundle
。不过,这似乎不适用于资产目录。
答案 1 :(得分:0)
我正在共享一段代码,该代码将从包中加载图像,并且与OSX,watchOS和iOS兼容。如果您只想要watchOS的解决方案,那么请退出#elseif os(watchOS)
部分
#if os(OSX)
import AppKit
public typealias Image = NSImage
#elseif os(watchOS)
import WatchKit
public typealias Image = UIImage
#else
import UIKit
public typealias Image = UIImage
#endif
public extension String
{
func image(in bundle: Bundle? = Bundle.main) -> Image?
{
#if os(OSX)
guard let img = bundle?.image(forResource: self) else {
return nil
}
#elseif os(watchOS)
guard let resource = bundle?.resourceURL, let img = try? Image(data: Data(contentsOf: resource)) else {
return nil
}
#else
guard let img = Image(named: self, in: bundle, compatibleWith: nil) else {
return nil
}
#endif
return img
}
}