gpt4 book ai didi

swift - 如何使用 UIImage 而不是 URL 来初始化 MSSticker?

转载 作者:行者123 更新时间:2023-11-30 11:53:29 27 4
gpt4 key购买 nike

我正在创建一个动态创建贴纸的应用程序,这意味着用户在主机应用程序中创建图像,并且贴纸动态显示在 iMessage 贴纸中。

我解决这个问题的方法是将主机应用程序中的每个图像保存为数据(使用应用程序组 UserDefaults),然后将它们加载到扩展应用程序中,将它们保存在 iMessage 本地目录中,然后将它们加载到 MSSticker 中使用保存的网址:

let sticker = try! MSSticker(contentsOfFileURL: getDocumentsDirectory()!, localizedDescription: "sticker")

但是,我想知道是否有一种方法可以将 UIImage 作为贴纸加载,而不必在获取 URL 之前先将它们保存到本地目录中。我尝试将 UIImage 保存到主机应用程序目录中,但主机应用程序目录与扩展程序的应用程序目录不同,因此这不起作用。

最佳答案

您可以将贴纸文件保存到应用扩展目录内的文件夹中,然后获取贴纸的 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(称为:“猫”,来自:“猫”)

关于swift - 如何使用 UIImage 而不是 URL 来初始化 MSSticker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48089734/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com