Самый простой способ - использовать UICollectionView
и UICollectionViewFlowLayout
. UICollectionViewFlowLayout
предоставляется из коробки и является очень мощным.
В основном вам нужно:
- Добавить
UICollectionView
в контроллер представления.
- По умолчанию
UICollectionView
идет с Flow
выбран макет.
- Настройка
UICollectionViewFlowLayout
- Установить направление прокрутки по горизонтали
- Определение размера элемента и интервал между ними. Имейте в виду, что вам нужно всего лишь один элемент, чтобы он был полностью виден; кроме того, должны быть видны и пробелы слева и справа; еще больше вам нужно показать куски предыдущей и следующей карт, так что некоторые основные математики ждут вас :). Один небольшой трюк, который сделает вас первыми и последними картами правильно центрированными: вы должны указывать вставки вертикального сечения равными сумме видимой ширины предыдущей карты плюс пробел между картами.
шаги выше должно быть достаточно, чтобы иметь вертикально прокручивать карты зрения. Но это не будет здорово! Чтобы это было здорово, вам, вероятно, необходимо полностью сконцентрироваться на самой подходящей карте после прокрутки пользовательского конца. Для достижения липкой прокрутки вы должны работать со следующими UICollectionViewDelegate
методами:
// compute collection view content offset in method bellow
override func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
...
}
// compute targetContentOffset in method bellow
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
...
}
... последний намек: сделать вид коллекции торможения выглядеть быстро в коде контроллера представления сделать:
self.collectionView?.decelerationRate = UIScrollViewDecelerationRateFast
Индикатор пейджинга:
В примере, который вы предоставляете, имеется элемент управления поисковым вызовом, который отражает текущий элемент и общее количество элементов. Вам необходимо добавить UIPageControll
вручную; вы можете сделать это в раскадровке. Лучшее место для обновления состояния управления страницы будет:
// method in UICollectionView delegate that you need to define.
// update your paging info in method bellow.
override func scrollViewDidScroll(scrollView: UIScrollView) {
...
}
Примечания:
Методы, которые имеют дело с точки зрения прокрутки, которые я перечислил, наследуются UICollectionViewDelegate
от UIScrollViewDelegate
.UICollectionView
сам по себе от UIScrollViewDelegate
.
Это закончило работать отлично! Спасибо! Одна часть, которую я не совсем понимаю, - это липкая прокрутка - если вы за нее и чувствуете, что ее разрабатываете, я был бы очень благодарен. Если нет, все в порядке! В любом случае спасибо! –
Ive читал, и, похоже, я могу использовать 'targetContentOffset.memery.x', чтобы найти, где будет прокрутка ... но я не уверен, как перемещать ближайшую ячейку в центр с этой информацией? –
@ Кинлес Я понял это! Я установил 'collectionOffset = 0', а затем в' scrollViewWillEndDragging' я проверил, было ли 'targetContentOffset.memory.x' больше, чем' collectionOffset + 255', если тогда было установлено значение targetContentOffset и collectionOffset для 'collectionOffset + 255'. . etc –