我想将 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
}
Run Code Online (Sandbox Code Playgroud)
来源:我可以从 XCAssets 包中获取 NSURL 吗?
这似乎有点矫枉过正。但是,据我所知,这是获取可以使用的 URL 的唯一方法:
let imageURL = createLocalUrl(forImageNamed: "TestImage")
let attachment = try! UNNotificationAttachment(identifier: "image", url: imageURL!, options: [:])
content.attachments = [attachment]
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法将 Assets.xcassets 中的图像添加到本地通知?(是的,我知道我可以在 Assets 之外存储图像并使用 Bundle.main.etc)
也可以这样做:
extension UIImage {
func getURL() -> URL? {
guard let base64Image = pngData()?.base64EncodedString() else { return nil }
return URL(string: "data:image/png;base64,\(base64Image)")
}
}
Run Code Online (Sandbox Code Playgroud)
并称其为:
let imageURL = UIImage(named: "TestImage")?.getURL()
let attachment = try! UNNotificationAttachment(identifier: "image", url: imageURL!, options: [:])
content.attachments = [attachment]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |