Как запустить MSSticker, используя UIImage, а не URL?
Я создаю приложение, которое создает наклейки динамически, то есть пользователь создает изображения в главном приложении, и наклейка динамически отображается в наклейках iMessage.
Для решения этой проблемы я сохраняю каждое изображение в главном приложении в виде данных (используя группу приложений UserDefaults), а затем загружаю их в приложение расширения, сохраняя их в локальном каталоге iMessage, а затем загружая их в MSSticker с помощью URL-адреса. сохранены:
let sticker = try! MSSticker(contentsOfFileURL: getDocumentsDirectory()!, localizedDescription: "sticker")
Тем не менее, я хочу знать, есть ли способ загрузить UIImage в качестве стикеров без необходимости сохранять их в локальном каталоге, прежде чем получить URL. Я попытался сохранить UIImage в каталог приложения хоста, но каталог приложения хоста отличается от каталога приложения расширения, поэтому это не работает.
0 ответов
Вы можете сохранить свои файлы стикеров в папке внутри каталога расширений приложения, а затем получить URL-адреса для стикеров следующим образом:
let path = Bundle.main.path(forResource: filename, ofType: "png")! // In this example, stickers are in PNG
let url = URL(fileURLWithPath: path)
Вы даже можете создать удобный инициализатор для MSSticker
так что вам не нужно копировать и вставлять код выше:
extension MSSticker {
convenience init(called description: String, from filename: String) {
let path = Bundle.main.path(forResource: filename, ofType: "png")! // Make sure the specified file exists; otherwise, you’ll get a runtime error.
let url = URL(fileURLWithPath: path)
try! self.init(contentsOfFileURL: url, localizedDescription: description) // Unsafe
}
}
После этого вы сможете создавать стикеры с однострочным выражением:
let catSticker = MSSticker(called: "Cat", from: "cat")