PageViewController
PageViewControllerをコードのみで実装しました。備忘録としてここに記載します。(2023.01.29時点)
PageViewControllerとは
ページめくりや紙をめくるようなアニメーションができるViewController
実装
コードのみの実装のための設定
下記ブログで説明していますのでStoryBoardを使わない設定はこちらを参考にしてみてください。
UIPageViewController、VCのリストを宣言
// PageViewControllerクラス
private var pageViewController: UIPageViewController!
//PageViewで表示するViewControllerを格納する配列をそれぞれ定義
private var controllers: [ UIViewController ] = []
DataSourceでPageVCのページ数、めくる設定を実装
// PageVCのページ数、めくる設定を実装
// MARK: - UIPageViewController DataSource
extension ViewController: UIPageViewControllerDataSource {
/// ページ数
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return self.controllers.count
}
/// 左にスワイプ(進む)
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
if let index = self.controllers.firstIndex(of: viewController), //今のインデックス番号を取得
index < self.controllers.count - 1 { //最大のindex数を超えてなければ次ページのインデックスを渡す
return self.controllers[index + 1]
} else {
return nil
}
}
// 右にスワイプ (戻る)
// 0よりもインデックスが大きい場合に右にスワイプ処理が走ればインデックスを1ひく
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
if let index = self.controllers.firstIndex(of: viewController),
index > 0 {
return self.controllers[index - 1]
} else {
return nil
}
}
}
PageVCの基本設定を関数で宣言
//それぞれのPageVCの設定
private func initPageViewController() {
// 背景色定義
let backColor: [ UIColor ] = [ .systemIndigo, .systemOrange, .systemGreen ]
// ② 表示するViewController作成 & 表示配列に保存
for i in 0 ... 2 {
let myViewController: UIViewController = UIViewController()
myViewController.view.backgroundColor = backColor[i]
myViewController.view.frame = self.view.frame
self.controllers.append(myViewController)
}
// ③ UIPageViewController設定
pageViewController = UIPageViewController(
transitionStyle: .pageCurl, //ページめくる際のアニメーション
navigationOrientation: .horizontal, //めくる方向(縦or横)
options: nil)
//ディスプレイへの設定
pageViewController.setViewControllers([self.controllers[0]], direction: .forward, animated: true, completion: nil)
pageViewController.dataSource = self
// ④既存ViewControllerに設定したPageVCを追加
self.addChild(self.pageViewController)
//PageVCのviewを追加
self.view.addSubview(self.pageViewController.view!)
}
}
最後に
細かい設定の説明など必要であれば随時更新していきたいと思います。
どなたかのお役に立てれば幸いです。
ではまた。
コメント