• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 有没有比这更好的方法在通知附件中使用来自 Assets.xcassets 的图像?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:24:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想将 Assets.xcassets 中的图像附加到通知中。我一直在寻找解决方案大约一个小时,这似乎是唯一的方法:

func createLocalUrl(forImageNamed name: String) -> URL? {

let fileManager = FileManager.default
let cacheDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0]
let url = cacheDirectory.appendingPathComponent("\(name).png")

guard fileManager.fileExists(atPath: url.path) else {
    guard
        let image = UIImage(named: name),
        let data = UIImagePNGRepresentation(image)
        else { return nil }

    fileManager.createFile(atPath: url.path, contents: data, attributes: nil)
    return url
}

return url
}

来源:Can I get a NSURL from an XCAssets bundle?

这似乎有点矫枉过正。但是据我所知,这是获取您可以使用的 URL 的唯一方法:

let imageURL = createLocalUrl(forImageNamed: "TestImage")

let attachment = try! UNNotificationAttachment(identifier: "image", url: imageURL!, options: [:])
        content.attachments = [attachment]

有没有更好的方法将 Assets.xcassets 中的图像添加到本地通知? (是的,我知道我可以将图像存储在 Assets 之外并使用 Bundle.main.etc)



Best Answer-推荐答案


我知道这是个老问题,但我稍微改进了你的解决方案,也许有人会使用它

extension UIImage {
    func createLocalURL() -> URL? {
        guard let imageName = self.accessibilityIdentifier else {
            return nil
        }

        let fileManager = FileManager.default
        guard let cacheDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first else {
            return nil
        }
        let url = cacheDirectory.appendingPathComponent("\(imageName).png")

        guard fileManager.fileExists(atPath: url.path) else {
            guard let data = self.pngData() else { return nil }
            fileManager.createFile(atPath: url.path, contents: data, attributes: nil)
            return url
        }

        return url
    }
}

你想用的时候上课

func createImageAttachment(image: UIImage?) -> [UNNotificationAttachment] {
        var notificationAttachment: [UNNotificationAttachment] = []
        if let image = image,
            let imageUrl = image.createLocalURL(),
            let attachment = try? UNNotificationAttachment(identifier: "image", url: imageUrl, options: nil) {

            notificationAttachment.append(attachment)
        }

        return notificationAttachment
    }

并将图像添加到通知中

let image = UIImage(named: "TestImage")
content = createImageAttachment(image: image)

这样更安全

关于ios - 有没有比这更好的方法在通知附件中使用来自 Assets.xcassets 的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51488589/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap