我正在创建一个动态创建贴纸的应用程序,这意味着用户在主机应用程序中创建图像,贴纸会在iMessage贴纸中动态显示。
我正在接近这个问题的方法是将主机应用中的每个图像保存为数据(使用应用程序组UserDefaults),然后将它们加载到扩展应用程序中,将它们保存在iMessage本地目录中,然后将它们加载到MSSticker中使用已保存的网址:
let sticker = try! MSSticker(contentsOfFileURL: getDocumentsDirectory()!, localizedDescription: "sticker")
但是,我想知道是否有办法将UIImage加载为贴纸,而不必在获取URL之前先将它们保存到本地目录中。我已经尝试将UIImage保存到主机应用程序目录中,但主机应用程序目录与扩展程序的应用程序目录不同,因此这不起作用。
答案 0 :(得分: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")