@vii_onikovich

UICollectionView: при загрузке изображения с URL они начинают прыгать из столбца в столбец?

Добрый день!

Я загружаю данные с сайт в UICollectionView. При этом текстовые данные нормально отображаются, но вот картинки странно прыгают из ячейки в ячейку, то есть пока новая грузится, то старая как бы вместо нее, это именно происходит, если ячеек много, например штук 20, и когда листаешь до 10ой, то там изображения из верхних ячеек, пока новая не загрузится.

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

        cell.layer.borderColor = UIColor(red: 245 / 255, green: 245 / 255, blue: 245 / 255, alpha: 1).CGColor
        cell.layer.borderWidth = 0.5
        cell.backgroundColor = UIColor.whiteColor()
        
        cell.productTitle.text = productsTitle[indexPath.row]
        cell.productCost.text = productsCost[indexPath.row] + " грн."
        cell.productImage.image = nil
        cell.imageLoader.startAnimating()

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
            
            if self.cachedPhotos[indexPath.row] == nil {
       
                let imageThumbString = self.productsPhotos[indexPath.row]
                let imageUrl = NSURL(string: imageThumbString)
                let imageData = NSData(contentsOfURL: imageUrl!)
            
                dispatch_async(dispatch_get_main_queue(), {
                
                    if(imageData != nil){
                    
                        cell.productImage.image = UIImage(data: imageData!)
                        self.cachedPhotos[indexPath.row] = UIImage(data: imageData!)
                        cell.imageLoader.stopAnimating()
                        cell.imageLoader.hidden = true
                    
                    }
                
                });
                
            } else {
                
                cell.productImage.image = self.cachedPhotos[indexPath.row]
                
            }
            
        });

        return cell
        
    }
  • Вопрос задан
  • 419 просмотров
Пригласить эксперта
Ответы на вопрос 1
f0r3s1
@f0r3s1
iOS Developer
Тебе нужно сначала загрузить все объекты в массив и только потом заполнять ячейки, так как новая ячейка уже создалась и начала заполняться а изображение для старой ячейки еще не скачалось. Отдельной функцией заполняешь массив изображениями в определенном порядке и только потом заполняешь ячейки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы