Как я могу использовать модуль ImageSliderShow с collectionView в Swift? - PullRequest
0 голосов
/ 02 мая 2020

У меня есть вид коллекции с четырьмя разделами, как показано на рисунке. Для загрузки изображений с сервера я использую модуль Kingfisher. что я хочу сделать, когда я нажимаю одно из изображений в представлении коллекции, это перевести меня на UIPageControl, чтобы показать текущее выбранное изображение и прокрутить оставшуюся часть раздела. Я использую модуль под названием ImageSliderShow для обработки всей этой операции. Моя проблема в том, что когда я нажимаю изображение из одного из разделов в представлении коллекции и показываю изображение, а затем закрываю страницу, и когда я пытаюсь выбрать другое изображение из другого раздела, оно показывает мне то же изображение, которое я выбрал ранее. Он не перезагружается FullScreenSlideshowViewController автоматически.

collectionview

//MARK:- COLLECTION VIEW DID SELECT METHOD

func collectionViewDidSelect ( collectionView: UICollectionView,for index : Int , indexPath:IndexPath) {
    // kingfisherSources array type of KingfisherSource to add all images what I want
     for imageName in imagesNames[collectionView.tag]{
      kingfisherSources.append(KingfisherSource(urlString:"http://178.128.28.204\. (imageName.image)")!)
      }
      fullScreenController.inputs = kingfisherSources

      fullScreenController.initialPage = indexPath.item

      fullScreenController.slideshow.pageIndicator = ni
    let cell = collectionView.cellForItem(at: indexPath) as? systemDetailsCollectionViewCell
    guard let image = cell?.dataImage else {return}
    slideshowTransitioningDelegate = ZoomAnimatedTransitioningDelegate(imageView: image ,         slideshowController: fullScreenController)

    fullScreenController.slideshow.currentPageChanged = { [weak self] page in
      if let cell = collectionView.cellForItem(at: IndexPath(item: page, section: 0))as? systemDetailsCollectionViewCell, let imageView = cell.dataImage {
        self?.slideshowTransitioningDelegate?.referenceImageView = imageView
            }
        }

    Router.present(view: self.view, uiviewController: fullScreenController)
}

1 Ответ

0 голосов
/ 02 мая 2020

Входными данными для fullScreenController является массив imageNames и индекс, по которому он подключен.

Создайте эти входные данные локально и передайте их в fullScreenController. Проблема здесь заключается в том, что вы сохраняете переменную в контроллере представления и не сбрасываете ее до назначения новых значений. Следовательно, старые значения отображаются первыми.

kingfisherSources.removeAll()

должно исправить это. Однако я предлагаю следующий чистый код.

let images = imagesNames[collectionView.tag]
let imageIndex =  indexPath.item

fullScreenController.inputs  =  images
fullScreenController.initialPage = imageIndex
...