从其他套件中将UIImage加载到WatchKit中

时间:2018-08-15 01:27:23

标签: uiimage watchkit wkinterfaceimage

我的应用当前已被构造为使用动态库来实现代码重用。我将图像存储在动态库中,因此可以轻松在不同的应用程序目标之间共享它们。由于我可以使用UIImage(named:, in:, compatibleWith:)初始化程序从动态库加载图像,因此在iOS上这可以正常工作。但是,该初始化程序似乎在watchOS上不可用。还有其他方法可以从watchOS的动态库(具有不同的捆绑包)加载图像。顺便说一下,图像存储在资产目录中。

2 个答案:

答案 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
    }
}