Загрузка UIImage в WatchKit из другого комплекта

Мое приложение в настоящее время структурировано для использования динамической библиотеки для повторного использования кода. У меня есть изображения, хранящиеся в моей динамической библиотеке, чтобы их можно было легко разделить между различными целями приложения. Это прекрасно работает в iOS, потому что я могу использовать UIImage(named:, in:, compatibleWith:) инициализатор для загрузки изображения из моей динамической библиотеки. Тем не менее, этот инициализатор, кажется, не доступен на watchOS. Существует ли какой-либо другой способ загрузки изображений из динамической библиотеки (с другим комплектом) на watchOS. Кстати, изображение хранится в каталоге активов.

1 ответ

Обходной путь, который я обнаружил, заключался в использовании Bundle"s resourceURL чтобы получить корневой каталог Bundleпапку ресурсов, а затем загрузить изображения вручную из файловой системы, используя Data(contentsOf:) а также UIImage(data:), Это, похоже, не работает с каталогами активов, хотя.

Я делюсь фрагментом кода, который загружает изображение из пакета, и он совместим с 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
    }
}
Другие вопросы по тегам