【Swift】PageViewControllerで画面遷移する
はじめに
今回はPageViewControllerを使ってスワイプした時に画面遷移をさせてみます。
GitHub
実装
一番左がPageViewControllerで、赤色がFirstViewController, 青色がSecondViewController, 緑色がThirdViewControllerです。
そして、PageViewControllerというUIPageViewControllerを継承したクラスを作ります。
final class PageViewController: UIPageViewController
色のついたViewControllrにStoryboardIDとSwiftファイルを用意してください。
全体のコードは以下の通りです。
final class PageViewController: UIPageViewController {
private var controllers = [UIViewController]()
override func viewDidLoad() {
super.viewDidLoad()
setupPageViewController()
}
private func setupPageViewController() {
let firstVC = storyboard?.instantiateViewController(
withIdentifier: "FirstViewController"
) as! FirstViewController
let secondVC = storyboard?.instantiateViewController(
withIdentifier: "SecondViewController"
) as! SecondViewController
let thirdVC = storyboard?.instantiateViewController(
withIdentifier: "ThirdViewController"
) as! ThirdViewController
controllers = [firstVC, secondVC, thirdVC]
setViewControllers([controllers[0]], direction: .forward, animated: true, completion: nil)
self.dataSource = self
}
}
extension PageViewController: UIPageViewControllerDataSource {
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return controllers.count
}
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerBefore viewController: UIViewController) -> UIViewController? {
if let index = controllers.firstIndex(of: viewController),
index < controllers.count - 1 {
return controllers[index + 1]
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfter viewController: UIViewController) -> UIViewController? {
if let index = controllers.firstIndex(of: viewController),
index > 0 {
return controllers[index - 1]
}
return nil
}
}
解説
表示するためのViewControllerを配列に格納して管理します。
let firstVC = storyboard?.instantiateViewController(
withIdentifier: "FirstViewController"
) as! FirstViewController
let secondVC = storyboard?.instantiateViewController(
withIdentifier: "SecondViewController"
) as! SecondViewController
let thirdVC = storyboard?.instantiateViewController(
withIdentifier: "ThirdViewController"
) as! ThirdViewController
controllers = [firstVC, secondVC, thirdVC]
// 最初の画面を設定
setViewControllers([controllers[0]], direction: .forward, animated: true, completion: nil)
// ここでデリゲートも設定しておく
self.dataSource = self
setViewControllers(...)
を使い、最初に表示する画面を設定します。 setViewControllers
setViewControllers([controllers[0]], direction: .forward, animated: true, completion: nil)
UIPageViewControllerDataSource
を見ていきます。
ページ数を返します。
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return self.controllers.count
}
左スワイプ(Before)した時の表示する画面を返します。
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerBefore viewController: UIViewController) -> UIViewController? {
if let index = controllers.firstIndex(of: viewController),
index < controllers.count - 1 {
return controllers[index + 1]
}
return nil
}
右スワイプ(After)した時の表示する画面を返します。
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfter viewController: UIViewController) -> UIViewController? {
if let index = controllers.firstIndex(of: viewController),
index > 0 {
return controllers[index - 1]
}
return nil
}
おわりに
PageViewController
PageViewControllerを使った画面遷移をしてみました。
Author And Source
この問題について(【Swift】PageViewControllerで画面遷移する), 我々は、より多くの情報をここで見つけました https://qiita.com/REON/items/9e937128e611506f9027著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .