Изменение изображения вне collectionView при прокрутке ячеек collectionView - PullRequest
0 голосов
/ 12 января 2019

Я ищу способ изменить изображение в imageView, когда вы прокручиваете в другую ячейку в collectionView.

myimage

Поэтому при прокрутке ячейки (1) я хочу изменить изображение (2).

Какой лучший способ создать это?

Я уже провел много исследований, но так и не нашел решения.

1 Ответ

0 голосов
/ 12 января 2019

UICollectionView является подклассом UIScrollView, поэтому

  1. Сначала установите делегат collectionView на ViewController : collectionView.delegate = self
  2. Теперь установите ViewController на UIScrollViewDelegate
  3. Теперь реализуем scrollViewDidScroll как:

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let visibleRect = CGRect(origin: collectionView.contentOffset, size: collectionView.bounds.size)
        let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
        let visibleIndexPath = collectionView.indexPathForItem(at: visiblePoint)
    }
    
  4. В приведенном выше фрагменте кода мы получим видимый элемент для вашего collectionView.

  5. Теперь вы можете использовать это visibleIndexPath для обновления внешнего изображения.

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let visibleRect = CGRect(origin: collectionView.contentOffset, size: collectionView.bounds.size)
        let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
        let visibleIndexPath = collectionView.indexPathForItem(at: visiblePoint)
        outerImageView.image = UIImage(named: outerImageNames[visibleIndexPath.row])
    }
    

Здесь outerImageView относится к вашему внешнему изображению, а outerImageNames представляет собой массив строк с именами ваших изображений .

Я предположил, что изображения для внешнего UIImageView присутствуют в вашем комплекте. Но если изображения поступают из какого-то другого источника, то логику настройки изображения можно настроить. В случае изображений, поступающих из асинхронного API (FileSystem или Network call), я настоятельно рекомендую использовать интенсивное кэширование (в этом случае рассмотрите возможность использования KingFisher или SDWebImage ) ,

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