【问题标题】:How to init MSSticker using UIImage and not URL?如何使用 UIImage 而不是 URL 来初始化 MSSticker?
【发布时间】:2018-01-04 06:21:17
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: swift mssticker


    【解决方案1】:

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

    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")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 2016-12-04
      • 1970-01-01
      • 2016-12-20
      相关资源
      最近更新 更多