页面控件在完全转到下一页之前切换页面

Page control switches page before completely going to the next page

我为集合视图创建了一个页面控件,每个集合视图单元格都是屏幕的高度和宽度。 这是页面控件的设置:

// Setup the page control
func setupPageControl() {

    pageControl.pageIndicatorTintColor = cellColor
    pageControl.currentPageIndicatorTintColor = themeColor

    view.addSubview(pageControl)
    addPageControlConstraints()
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    pageControl.numberOfPages = collectionViewCellData.count
    return collectionViewCellData.count
}

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    pageControl.currentPage = indexPath.row
}

页面控件有一个小问题,检查一下:

请注意,当我还没有完全转到下一页时,页面控件是如何变化的,我该如何解决这个问题?

您需要使用 UIPageViewControllerDelegate 的方法 "didFinishAnimating: previousViewControllers: transitionCompleted:" 并使用帮助您更新页面的 transitionCompleted 布尔值

参考这个link使用UIPageControl

问题很简单,就是您在 willDisplay 单元格中设置了页面控件的 currentPage,关于它的文档说:

Tells the delegate that the specified cell is about to be displayed in the collection view.

这是一种在显示单元格之前调用的方法。

您应该根据自己的目的使用 scrollViewDidEndDecelerating(_ scrollView: UIScrollView)

感谢@Dhaval Raval,我在他提供的 link 中找到了答案,这里是:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let pageIndex = round(scrollView.contentOffset.x/view.frame.width)
    pageControl.currentPage = Int(pageIndex)
}