import UIKit
class NestVC: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
let pageViewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
/*
let pageControl:UIPageControl = {
let pc = UIPageControl()
pc.currentPageIndicatorTintColor = .red
pc.pageIndicatorTintColor = .blue
pc.translatesAutoresizingMaskIntoConstraints = false
return pc
}()
*/
var vcs = [UIViewController]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setPageViewController()
//setPageControl()
}
func setPageViewController() {
pageViewController.dataSource = self
pageViewController.delegate = self
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc1 = storyboard.instantiateViewController(withIdentifier: "SB_NAV_MODE1") as! UINavigationController
let vc2 = storyboard.instantiateViewController(withIdentifier: "SB_NAV_MODE2") as! UINavigationController
pageViewController.setViewControllers([vc1], direction: .forward, animated: true, completion: nil)
vcs.append(vc1)
vcs.append(vc2)
addChild(pageViewController)
view.addSubview(pageViewController.view)
pageViewController.didMove(toParent: self)
}
/*
func setPageControl() {
pageControl.numberOfPages = 2
view.addSubview(pageControl)
NSLayoutConstraint.activate([
pageControl.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0),
pageControl.leadingAnchor.constraint(equalTo: view.leadingAnchor),
pageControl.trailingAnchor.constraint(equalTo: view.trailingAnchor)
])
}
*/
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
// MARK: - PageViewController
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let index = vcs.firstIndex(of: viewController) else {
return nil
}
let prevIndex = index - 1
guard prevIndex >= 0 else {
return nil // vcs.last
}
guard vcs.count > prevIndex else {
return nil
}
return vcs[prevIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let index = vcs.firstIndex(of: viewController) else {
return nil
}
let nextIndex = index + 1
guard nextIndex < vcs.count else {
return nil // or vcs.first
}
return vcs[nextIndex]
}
func presentationCount(for pageViewController:UIPageViewController) -> Int {
return vcs.count
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
guard let firstViewController = vcs.first, let firstViewControllerIndex = vcs.firstIndex(of: firstViewController) else {
return 0
}
return firstViewControllerIndex
}
// 스와이프 제스쳐가 끝나면 호출되는 메서드입니다. 여기서 페이지 컨트롤의 인디케이터를 움직여줄꺼에요
func pageViewController(_ pageViewController: UIPageViewController,
didFinishAnimating finished: Bool,
previousViewControllers: [UIViewController],
transitionCompleted completed: Bool
) {
// 페이지 이동이 안됐으면 그냥 종료
guard completed else { return }
// 페이지 이동이 됐기 때문에 페이지 컨트롤의 인디케이터를 갱신해줍시다
/*
if let vc = pageViewController.viewControllers?.first {
pageControl.currentPage = vc.view.tag
}
*/
}
}