Closed
Description
- 여러 개의 뷰를 페이징 처럼 넘기면서 볼 때 사용.
- 사용법
- 뷰 컨트롤러 배열 선언
var pageViewControllerList: [UIViewController] = []
- 배열에 뷰 컨틀로러를 추가해줌
func createPageViewController() {
let sb = UIStoryboard(name: "WalkThrough", bundle: nil)
let vc1 = sb.instantiateViewController(withIdentifier: FirstViewController.reuseIdentifier) as! FirstViewController
let vc2 = sb.instantiateViewController(withIdentifier: SecondViewController .reuseIdentifier) as! SecondViewController
let vc3 = sb.instantiateViewController(withIdentifier: ThirdViewController.reuseIdentifier) as! ThirdViewController
pageViewControllerList = [vc1, vc2, vc3]
}
- extension 추가
extension PageViewController: UIPageViewControllerDelegate, UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
// 현재 페이지뷰컨트롤러에 보이는 뷰컨(ViewController)의 인덱스 가져오기
guard let viewControllerIndex = pageViewControllerList.firstIndex(of: viewController) else { return nil }
let previousIndex = viewControllerIndex - 1
return previousIndex < 0 ? nil : pageViewControllerList[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = pageViewControllerList.firstIndex(of: viewController) else { return nil }
let nextIndex = viewControllerIndex + 1
return nextIndex >= pageViewControllerList.count ? nil : pageViewControllerList[nextIndex]
}
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return pageViewControllerList.count
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
guard let first = viewControllers?.first, let index = pageViewControllerList.firstIndex(of: first) else { return 0 }
return index
}
}
func configurePageViewController() {
delegate = self
dataSource = self
// display
guard let first = pageViewControllerList.first else { return }
setViewControllers([first], direction: .forward, animated: true)
}
- 자 그럼 순서를 다시 복기해보자
- 위에 코드에선 생략했지만 pageViewController 한개, 넘겨서 보여줄 view Controller들이 필요하다
- 뷰컨들을 생성해준 후
- 뷰컨트롤러 배열을 만들어서 거기에 뷰컨트롤러들을 추가해줌
- extension에 페이지뷰에 보여줄 뷰컨들의 인덱스를 가져오는 등 pageView를 보여주기 위한 작업을 하고
- delegate, datasource를 self로 초기화해준 후
- display하는 코드를 작성하면 끝
Metadata
Metadata
Assignees
Labels
No labels