菜鸟教程小白 发表于 2022-12-11 20:24:28

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


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

<pre><code>func createLocalUrl(forImageNamed name: String) -&gt; URL? {

let fileManager = FileManager.default
let cacheDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)
let url = cacheDirectory.appendingPathComponent(&#34;\(name).png&#34;)

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
}
</code></pre>

<p>来源:<a href="https://stackoverflow.com/questions/21769092/can-i-get-a-nsurl-from-an-xcassets-bundle]" rel="noreferrer noopener nofollow">Can I get a NSURL from an XCAssets bundle?</a> </p>

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

<pre><code>let imageURL = createLocalUrl(forImageNamed: &#34;TestImage&#34;)

let attachment = try! UNNotificationAttachment(identifier: &#34;image&#34;, url: imageURL!, options: [:])
      content.attachments =
</code></pre>

<p>有没有更好的方法将 Assets.xcassets 中的图像添加到本地通知? (是的,我知道我可以将图像存储在 Assets 之外并使用 Bundle.main.etc)</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我知道这是个老问题,但我稍微改进了你的解决方案,也许有人会使用它</p>

<pre><code>extension UIImage {
    func createLocalURL() -&gt; 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(&#34;\(imageName).png&#34;)

      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
    }
}

</code></pre>

<p>你想用的时候上课</p>

<pre><code>func createImageAttachment(image: UIImage?) -&gt; {
      var notificationAttachment: = []
      if let image = image,
            let imageUrl = image.createLocalURL(),
            let attachment = try? UNNotificationAttachment(identifier: &#34;image&#34;, url: imageUrl, options: nil) {

            notificationAttachment.append(attachment)
      }

      return notificationAttachment
    }
</code></pre>

<p>并将图像添加到通知中</p>

<pre><code>let image = UIImage(named: &#34;TestImage&#34;)
content = createImageAttachment(image: image)
</code></pre>

<p>这样更安全</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 有没有比这更好的方法在通知附件中使用来自 Assets.xcassets 的图像?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/51488589/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/51488589/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 有没有比这更好的方法在通知附件中使用来自 Assets.xcassets 的图像?