[iOS] UIPageViewController + UIPageControl

김상우·2022년 5월 16일
0

완성 모습

  • UIPageViewController 에서 Page Indicator 로서 UIPageControl 을 사용해봤다.
  • UIPageViewController 의 delegate 메서드 viewControllerBeforeviewControllerAfter 에서 UIPageControl 의 currentPage 를 변경해주면 제대로 작동하지 않는 버그를 발견했고, 해결한 방법을 기록한다.


UIPageViewController Delegate

  • UIPageControl 선언
lazy var pageControl: UIPageControl = {
    let pageControl = UIPageControl()
  	// design custom
    pageControl.currentPageIndicatorTintColor = FooiyColors.pink
    pageControl.pageIndicatorTintColor = FooiyColors.pageIndicator_gray
    pageControl.numberOfPages = 6
    pageControl.currentPage = 0
    pageControl.preferredIndicatorImage = UIImage(named: "pageIndicator_default")
    
    return pageControl
}()

  • UIPageViewController 의 delegate 메서드 중 willTransitionTodidFinishAnimating 을 사용한다.
...

var currentIndex: Int?
var pendingIndex: Int?

...

func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
    pendingIndex = vcArray.firstIndex(of: pendingViewControllers.first!)
}

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
    if completed {
        currentIndex = pendingIndex
        if let index = currentIndex {
            pageControl.currentPage = index
        }
    }
}
profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.

0개의 댓글