Как автоматически прокрутить UICollectionview в одном направлении swift 4? - PullRequest
0 голосов
/ 11 сентября 2018

добрый полдень

Мне нужно прокрутить ячейку просмотра uicollection в одном направлении.

Например: -

У меня есть массив с 4 значениями данных -> ["apple", "pen", "book", "bottle"].

Мне нужно прокрутить ячейку Uicollectionview следующим образом:

яблоко -> ручка -> книга -> бутылка -> яблоко -> ручка -> книга -> бутылка -> продолжить ..

Я использовал этот код для автоматической прокрутки, но в моем случае прокрутки представления коллекции, как:

яблоко -> ручка -> книга -> бутылка <- (прокрутить назад к первому указателю) яблоко -> ручка -> книга -> бутылка

Код:

@objc func scrollAutomatically(_ timer1: Timer) {

      if let coll  = CV_Slider {
            for cell in coll.visibleCells {
                let indexPath: IndexPath? = coll.indexPath(for: cell)
                if ((indexPath?.row)!  < self.arr_img_Slide.count - 1){
                    let indexPath1: IndexPath?
                    indexPath1 = IndexPath.init(row: (indexPath?.row)! + 1, section: (indexPath?.section)!)

                    coll.scrollToItem(at: indexPath1!, at: .centeredHorizontally, animated: true)
                }
                else{
                    let indexPath1: IndexPath?
                    indexPath1 = IndexPath.init(row: 0, section: (indexPath?.section)!)
                    coll.scrollToItem(at: indexPath1!, at: .centeredHorizontally, animated: true)
                }

            }
        }
    }

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Если вы хотите прокрутить только на правой стороне, то вы можете сделать что-то вроде этого:

1) добавить первый объект к последнему

["apple","pen","book","bottle","apple"]

2) Теперь, когда вы реализовали связанный с collectionView делегат, методы dataSource, то в этом нет никаких изменений.

3) Теперь, когда происходит автоматическая прокрутка, при достижении последнего индекса вы должны прокрутить до первого индекса без анимации.

@objc func scrollAutomatically(_ timer1: Timer) {

        if let coll  = CV_Slider {
            for cell in coll.visibleCells {
                let indexPath: IndexPath? = coll.indexPath(for: cell)

                //0,1,2,3,4
                if ((indexPath?.row)!  < self.arr_img_Slide.count - 1) {
                    let indexPath1: IndexPath?
                    indexPath1 = IndexPath.init(row: (indexPath?.row)! + 1, section: (indexPath?.section)!)

                    coll.scrollToItem(at: indexPath1!, at: .centeredHorizontally, animated: true)
                    if indexPath1.row == self.arr_img_Slide.count - 1 {
                        let indexPath2: IndexPath?
                        indexPath2 = IndexPath.init(row: 0, section: (indexPath?.section)!)
                        coll.scrollToItem(at: indexPath2!, at: .centeredHorizontally, animated: false)
                    }
                }
            }
        }
    }

Попробуйте поделиться своими результатами.

0 голосов
/ 11 сентября 2018

1) вернуть очень большое число из «collectionView: numberOfItemsInSection:», как NSIntegerMax

2) в «collectionView: cellForItemAtIndexPath», а не просто индексировать непосредственно в массив источника данных, чтобы получить данные для заполнения ячейки, используя оператор%. И.Е. сделать:

let item = datasource[indexPath.row % dataSource.count]

Вместо:

let item = datasource[indexPath.row]

Это даст вам бесконечную и круговую коллекцию.

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