Загрузка UIImage в CollectionView Cell останавливает движение - PullRequest
0 голосов
/ 25 мая 2019

У меня есть UICollectionViewCell с 1-3 UIImageView, которые управляются stackView.

Все изображения имеют около 8 МБ.Я загружаю их асинхронно из CoreData перед вызовом collectionView.reload ()

. В этой настройке представление коллекции замирает при перемещении при загрузке новых ячеек.

Я пробовал это с меньшими изображениями, а затем неfreeze.

Теперь я уменьшаю изображения до их загрузки в UIImageView.Но это приводит к другому странному поведению, например, сначала показать картинку из другой ячейки, а затем добавить правильные.

override func configureCellAtIndexPath(item: Journaling) {
        super.configureCellAtIndexPath(item: item)

        let imageOne = UIImageView()
        let imageTwo = UIImageView()
        let imageThree = UIImageView()
        imageContainer = nil
        imageOne.image = nil
        imageTwo.image = nil
        imageThree.image = nil


        if item.image.count == 1 {
            let group = DispatchGroup()
            group.enter()
            var downsizedImage = [UIImage]()
            DispatchQueue.global().async {
                downsizedImage.append(item.image[0].downsizeImage(.low)!)

                group.leave()
            }

            group.notify(queue: .main) {
                imageOne.image = downsizedImage[0]
                imageTwo.image = nil
                imageThree.image = nil
                self.setUpStackView([imageOne])
            }
        }

        if item.image.count == 2 {
            let group = DispatchGroup()
            group.enter()
            var downsizedImage = [UIImage]()
            DispatchQueue.global().async {
                downsizedImage.append(item.image[0].downsizeImage(.low)!)
                downsizedImage.append(item.image[1].downsizeImage(.low)!)
                group.leave()
            }

            group.notify(queue: .main) {
                imageOne.image = downsizedImage[0]
                imageTwo.image = downsizedImage[1]
                imageThree.image = nil
                self.setUpStackView([imageOne,imageTwo])
            }


        }

        if item.image.count > 2 {
            let group = DispatchGroup()
            group.enter()
            var downsizedImage = [UIImage]()
            DispatchQueue.global().async {
                downsizedImage.append(item.image[0].downsizeImage(.low)!)
                downsizedImage.append(item.image[1].downsizeImage(.low)!)
                downsizedImage.append(item.image[2].downsizeImage(.low)!)

                group.leave()
            }

            group.notify(queue: .main) {
                imageOne.image = downsizedImage[0]
                imageTwo.image = downsizedImage[1]
                imageThree.image = downsizedImage[2]
                self.setUpStackView([imageOne,imageTwo,imageThree])
            }
        }

        imageOne.contentMode = .scaleAspectFill
        imageOne.clipsToBounds = true
        imageTwo.contentMode = .scaleAspectFill
        imageTwo.clipsToBounds = true
        imageThree.contentMode = .scaleAspectFill
        imageThree.clipsToBounds = true
    }

    func setUpStackView(_ views: [UIView]) {
        self.imageContainer = UIStackView(arrangedSubviews: views)
        self.imageContainer.axis = .horizontal
        self.imageContainer.distribution = .fillEqually

        placeholder.sv(imageContainer)
        imageContainer.addConstrainsToSuperView(distance: 0, superView: placeholder)

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...