2015-10-17 2 views
1

Я просто отчаялся, искал 6 часов и не могу найти ответа.Просмотр коллекции для повторного использования изображений при прокрутке в swift 2

У меня есть представление коллекции с изображениями, загружаемыми с удаленного сервера, и при прокрутке ячеек обновляются несколько предыдущих изображений до нескольких секунд. Пробовал переопределение «подготовить для повторного использования» и установив ImageView изображения на ноль, но он по-прежнему не работает .. Оценил пример из тех, кто получил это работает,

спасибо большое!

EDIT - ДОБАВЛЕНИЕ КОДА

CollectionView:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath:indexPath) as! PictureCell 

    cell.pictureCD = GalleryCD().fetchTable()[indexPath.row] 

    return cell 
} 

CollectionViewCell:

class PictureCell: UICollectionViewCell { 
@IBOutlet weak var picture: UIImageView! 

var pictureCD: NSManagedObject! { 
    didSet { self.setupData() } 
} 

override func prepareForReuse() { 
    super.prepareForReuse() 

    self.picture.image = nil 
    self.picture.setNeedsDisplay() // tried adding after some recommendations 
    self.setNeedsDisplay()   // tried adding after some recommendations 
} 

func setupData(){ 
    self.picture.image = UIImage(named: "blank") 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { 
     let URL = (NSURL (string: url.pictureSquareGET(picture: self.pictureCD)))! 

     let data = NSData(contentsOfURL: URL)! 

     dispatch_async(dispatch_get_main_queue()) { 
      self.picture.image = UIImage(data: data) 
     } 
    }) 
} 

}

+2

Показать код .. –

+0

ли вы назвать super.prepareForReuse как первое заявление в prepareForReuse? – Darko

+0

вставил код выше, спасибо – John

ответ

0

Ваши клетки имеют предыдущие изображения, загруженные в них из-за повторного использования клеток так что вы там.

Все, что вам нужно сделать, это установить изображение ячеек как нуль в cellForItemAtIndexPath, прежде чем извлекать обновленные из вашего сервера.

+0

Это очевидное решение Beau, но prepareForReuse должно установить изображение уже на ноль. – Darko

+0

Не могли бы вы взглянуть и посмотреть, что я делаю что-то не так? – John

+0

У вас все еще такая же проблема? – Darko

0

Вы можете обновить метод prepareForReuse

override func prepareForReuse() { 

    myImageView.image = nil 

    super.prepareForReuse() 
} 
Смежные вопросы