首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用UIImage而不是URL初始化MSSticker?

如何使用UIImage而不是URL初始化MSSticker?
EN

Stack Overflow用户
提问于 2018-01-04 14:21:17
回答 1查看 407关注 0票数 0

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

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

代码语言:javascript
复制
let sticker = try! MSSticker(contentsOfFileURL: getDocumentsDirectory()!, localizedDescription: "sticker")

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

EN

回答 1

Stack Overflow用户

发布于 2018-12-26 23:57:24

您可以将贴纸文件保存到应用程序扩展目录内的文件夹中,然后获取贴纸的URL,如下所示:

代码语言:javascript
复制
let path = Bundle.main.path(forResource: filename, ofType: "png")! // In this example, stickers are in PNG
let url = URL(fileURLWithPath: path)

您甚至可以为MSSticker创建一个方便的初始化器,这样您就不必复制和粘贴上面的代码:

代码语言:javascript
复制
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")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48089734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档