使用 SDWebImage 将图像作为 NSData 复制到粘贴板

Using SDWebImage to copy an image as NSData to Pasteboard

我正在使用 SDWebImage 将图像加载到 UICollectionView。然后,当用户点击图片时,我想将其复制到 Pasteboard,以便他们可以将其粘贴到其他应用程序中。

我目前在didSelectItemAtIndexPath方法中使用的代码返回到网络复制图像。但是图像应该已经在用户的缓存中了。

如何使用 SDWebImageNSData 抓取图像?

这样应用程序将首先检查图片的缓存。当我尝试使用 SDWebImage.

时,我将 运行 放入 DataType 问题

这是我当前的代码。我想修复 didSelectItemAtIndexPath:

中的代码
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let iCell = collectionView.dequeueReusableCellWithReuseIdentifier("ImageCollectionViewCell", forIndexPath: indexPath) as! ImageCollectionViewCell
    let url = NSURL(string: self.imgArray.objectAtIndex(indexPath.row) as! String)

    iCell.imgView.sd_setImageWithURL(url)

    return iCell
}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

    // Change code below to use SDWebImage

    let url = NSURL(string: self.imgArray.objectAtIndex(indexPath.row) as! String)

    let data = NSData(contentsOfURL: url!)

    if data != nil {
        UIPasteboard.generalPasteboard().setData(data!, forPasteboardType: kUTTypePNG as String)
    } else {
        // Do nothing
    }
}

SDWebImage 有缓存。您可以使用 SDImageCache 访问它。允许自定义(缓存的不同命名空间)。

let image = SDImageCache.sharedImageCache.imageFromDiskCacheForKey(url!)‌
if image != nil
{
    let data = UIImagePNGRepresentation(image);
}

您必须检查 image 是否不是 nil,因为下载是异步的。因此用户可能会触发 collectionView:didSelectItemAtIndexPath: 而图像尚未下载,并且本身不存在于缓存中。