2016-08-25 9 views
0

Я использую SDWebImag e для загрузки изображений в UICollectionView. Затем, когда пользователь нажимает на изображение, я хочу скопировать его в Pasteboard, чтобы они могли вставить его в другие приложения.Использование SDWebImage для копирования изображения как NSData to Pasteboard

Код, который я использую в методе didSelectItemAtIndexPath, возвращается в Интернет для копирования изображения. Но изображение должно быть уже в кеше пользователя.

Как использовать SDWebImage, чтобы получить изображение для NSData?

Таким образом, приложение сначала проверит кеш для изображения. Я стараюсь использовать DataType вопросов при попытке использовать SDWebImage.

Это мой текущий код. Я хочу, чтобы исправить код в 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 = UIImagePNGRпредставление (изображение); '? Возможно, вам нужно проверить, существует ли «образ» (изображение уже находится в кеше). – Larme

+0

СПАСИБО! Это сработало. И вы правы, я должен проверить, существует ли изображение, иначе оно сработает, если его там нет. Я добавил оператор if, чтобы проверить, что 'image! = Nil' перед' let data = UIImagePNGRepresentation (image) 'еще искать изображение онлайн с моим исходным кодом. –

ответ

0

SDWebImage имеет кэш. Вы можете получить к нему доступ с помощью SDImageCache. Доступна настройка (разные пространства имен для кешей).

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

Вы должны проверить, если image не nil, поскольку загружаемые файлы asynchrone. Таким образом, пользователь может вызвать collectionView:didSelectItemAtIndexPath:, тогда как изображение еще не загружено и само по себе отсутствует в кеше.