Как создать анимацию прокрутки ячеек для CollectionView

swift
xcode
ios
swift3

#1

Кто знает как создать свою анимацию для прокрутки ячеек в collection View ?
Нужно чтоб получилось как реклама с верху пролистывая ячейки с изображением.

В этих методов срабатывает стандартная анимация при вызове.

 collectionView.scrollToItem(at: IndexPath, at: UICollectionViewScrollPosition, animated: Bool)
 collectionView.setContentOffset(CGPoint, animated: Bool)

Например если устанавливать вот таким способом анимацию то она срабатывает криво. Когда срабатывает анимация то предыдущая ячейка пропадаем

let contentOffset = collectionView.contentOffset.x + collectionView.bounds.size.width

UIView.animate(withDuration: 0.5) { 
            self.collectionView.contentOffset.x = contentOffset
        }

#2

Используйте UIPageViewController:

Есть анимация и есть возможность скролить в одну сторону по кругу.


#3

Да но как в нем же создать свою анимацию ? А не использовать стандартную


#4
pageViewController.setViewControllers([viewController], direction: .forward, animated: true)

Это тоже самое что у collectionView:

let contentOffset = collectionView.contentOffset.x + collectionView.bounds.size.width

UIView.animate(withDuration: 0.5) {
    self.collectionView.contentOffset.x = contentOffset
}

Нужно transition style поставить scroll:


Динамичный Header для UICollectionView
#5

Мне нужно своя анимация прокрутки а не просто стиль.

Например вот так

let contentOffset = scrollView.contentOffset.x + scrollView.bounds.size.width

UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
            self.pageControl.currentPage = index
            self.scrollView.contentOffset.x = contentOffset
        }) { (completion)in
            self.delay(self.interval, closure: {
                self.autoScroll()
            })
            
        }

Это все автоматически прокручивает как типа реклама с верху по одной картинки.

В UIPageViewController я не знаю как автоматом вызвать прокрутку так еще чтоб не просто скрол а со своей анимацией


#6

У вас такая же анимация что и:

pageViewController.setViewControllers([viewController], direction: .forward, animated: true)

Вам достаточно запустить её в таймере по кругу.

Накидать пример?


#7

Если вас не затруднит то было бы здорова )


#8

#9

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

Хотел бы я так научиться писать код как вы у вас очень красиво и грамотно все сделано.


Dynamic height for collection Cell
#10

а можно мне ссылку не на яндекс?


#11

#12

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

let offsetX = collectionView!.frame.width
UIView.animate(withDuration: 0.2, animations: {
    self.collectionView!.contentOffset.x = offsetX - 0.5
}, completion: { _ in
    self.collectionView!.contentOffset.x = offsetX
})

#13

Так вот и вся проблема я не знаю как это сделать ).
Я например когда устанавливаю

flowLayout.estimatedItemSize = CGSize(width: frame.width - 8, height: frame.height - 2)

то анимация нормально прокручивает и ячейки не пропадают но только три раза столько сколько есть банеров а потом ошибка.


#14

Логично что ошибка ячеек то дальше нет, нужно прокручивать до первой и так по кругу.


#15

Ошибка вылетает не только потому что ячеек дальше нет а просто даже если вперед назад мотать одну и туже ячейку столько количество раз сколько есть банеров


#16

Попробуйте что то вроде этого: https://yadi.sk/d/wkmHzZgO3KQr43


#17

Гениально просто )) то что нужно было ). Теперь разбераюсь как это все работает ). Спасибо большое !


#18

Не подскажите как можно создать динамическую ячейку из collectionView ? Например в ячейки расположен стек из разных лейблов в которых содержится текст. Но количество лейблов бывает разное и стек подстраивает автоматически размер для себя же но как сделать размер ячейки под размер стека в котором бывает разное количество объектов.


#19

Не совсем понял, попробуйте это нарисовать)


#20

Вот два скриншота на них создан UIStackView() а в нем уже 4 UILabel() расположены по вертикале (синий квадрат это просто UIImageView()). Иногда их бывает меньше как например с лева скриншот на нем нету зеленого UILabel() и сам стек уменьшился. Вопрос как рассчитать эту высоту для ячеек UICollectionViewCell. Ведь для ячеек требуется определенный размер а нужно чтоб высота ячейки подстраивалась под UIStackView