Метод 1: использование смещения контента
Один из способов получить текущую страницу в постраничном UIScrollView — использовать смещение ее содержимого. Смещение содержимого представляет текущую позицию представления прокрутки, и мы можем использовать его для расчета индекса страницы.
func getCurrentPage(scrollView: UIScrollView) -> Int {
let pageWidth = scrollView.frame.width
let currentPage = Int((scrollView.contentOffset.x + pageWidth / 2) / pageWidth)
return currentPage
}
В этом методе мы делим смещение содержимого на ширину каждой страницы и округляем его до ближайшего целого числа, чтобы получить индекс текущей страницы.
Метод 2: делегат представления отслеживаемой прокрутки
Другой подход — использовать UIScrollViewDelegate и отслеживать изменения представления прокрутки в режиме реального времени.
class ViewController: UIViewController, UIScrollViewDelegate {
var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let currentPage = Int(scrollView.contentOffset.x / scrollView.frame.width)
print("Current Page: \(currentPage)")
}
}
Реализуя метод scrollViewDidEndDeceleratingиз UIScrollViewDelegate, мы можем определить, когда заканчивается анимация прокрутки, и получить индекс текущей страницы на основе смещения содержимого.
Метод 3: интеграция UIPageControl
Если вы используете UIPageControl для отображения точек нумерации, вы можете синхронизировать его с UIScrollView, чтобы получить текущую страницу.
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let currentPage = Int(scrollView.contentOffset.x / scrollView.frame.width)
pageControl.currentPage = currentPage
}
Если установить свойство currentPageдля UIPageControl, оно будет автоматически обновляться, отражая текущую страницу при прокрутке пользователем.
Метод 4: использование свойстваvisibleRect
Немного другой подход предполагает использование свойства visibleRectграниц UIScrollView для определения текущей страницы.
func getCurrentPage(scrollView: UIScrollView) -> Int {
let visibleRect = CGRect(origin: scrollView.contentOffset, size: scrollView.bounds.size)
let currentPage = Int(visibleRect.midX / scrollView.frame.width)
return currentPage
}
Вычислив значение MidX видимогоRect и разделив его на ширину каждой страницы, мы можем получить индекс текущей страницы.
Метод 5: интеграция CollectionView
Если вы используете UICollectionView с включенным разбиением по страницам вместо UIScrollView, вы можете извлечь текущую страницу, используя видимые ячейки.
func getCurrentPage(collectionView: UICollectionView) -> Int {
let visibleCells = collectionView.visibleCells
guard let currentCell = visibleCells.first else { return 0 }
let currentPage = collectionView.indexPath(for: currentCell)?.item ?? 0
return currentPage
}
Получив первую видимую ячейку и получив соответствующий индексный путь, мы можем определить текущую страницу.
Подведение итогов
В этой статье мы рассмотрели несколько методов получения текущей страницы в постраничном UIScrollView. Предпочитаете ли вы использовать смещение контента, отслеживание делегатов, интеграцию UIPageControl, свойствоvisibleRect или интеграцию UICollectionView, теперь у вас есть несколько вариантов на выбор.
Не забудьте учесть конкретные требования вашего приложения и выбрать метод, который лучше всего соответствует вашим потребностям. Приятного кодирования!