2016-08-25 9 views
0

私はSDWebImag eを使用して画像をUICollectionViewにロードしています。ユーザーが画像をクリックすると、その画像をPasteboardにコピーして他のアプリに貼り付けることができます。SDWebImageを使用してNSDataとして画像をペーストボードにコピー

私が現在didSelectItemAtIndexPathメソッドで使用しているコードは、画像をコピーするためにウェブに戻っています。しかし、イメージはすでにユーザーのキャッシュに保存されているはずです。

を使用してNSDataの画像を取得するにはどうすればよいですか?

このように、アプリは最初に画像のキャッシュをチェックします。 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 
    } 
} 
+0

「let image = SDImageCache.sharedImageCache.imageFromDiskCacheForKey(url!);を試してください。 let data = UIImagePNGRepresentation(image); '? 'image'が存在するかどうかをチェックする必要があるかもしれません(イメージはすでにキャッシュにあります)。 – Larme

+0

感謝!これはうまくいった。そして、あなたは正しいです、私は画像が存在するかどうかをチェックしなければなりません。そうでなければ、それがなければクラッシュします。 'let!data = UIImagePNGRepresentation(image) 'の前に' image!= nil'をチェックして、元のコードでオンラインで画像を探すif文を追加しました。 –

答えて

0

SDWebImageキャッシュを持っています。 SDImageCacheでアクセスできます。カスタマイズが許可されています(キャッシュの異なる名前空間)。

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

あなたはダウンロードがasynchroneあるためimagenilでないかどうかを確認する必要があります。したがって、ユーザーはcollectionView:didSelectItemAtIndexPath:をトリガーすることがありますが、イメージはまだダウンロードされておらず、キャッシュには存在しません。

関連する問題