Загрузка 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
}
}