【Swift】コードのみでPageViewControllelr作成

Swift

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!)
    }
}

最後に

細かい設定の説明など必要であれば随時更新していきたいと思います。
どなたかのお役に立てれば幸いです。

ではまた。

コメント

タイトルとURLをコピーしました