30行の単一ファイルでUIPageView


【決定版】UIPageViewControllerの使い方(Swift) - Qiita

で勉強して、作ってみました。

PageViewController.swiftを作って、

UIPageViewControllerのカスタムビューにセット。

そのまま2カ所編集します。

次の「Use Storyboad ID」を忘れずに。「second」「third」も同様。

PageViewController.swift
import UIKit

class PageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

    let pageList = ["first", "second", "third"]

    override func viewDidLoad() {
        super.viewDidLoad()
        dataSource = self  // 忘れがち
        setViewControllers([storyboardId("first") as! UIViewController], direction: .Forward, animated: true, completion: nil)
    }

    // 便利
    func storyboardId(strID: String) -> AnyObject! {
        return (storyboard?.instantiateViewControllerWithIdentifier(strID))
    }

    // 1ページ進む
    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
        let index = pageList.indexOf(viewController.restorationIdentifier!)
        if index < (pageList.count - 1) {
            return (storyboardId(pageList[index! + 1]) as! UIViewController)
        } else {
            return nil
        }
    }

    // 1ページ戻る
    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
        let index = pageList.indexOf(viewController.restorationIdentifier!)
        if 0 < index {
            return (storyboardId(pageList[index! - 1]) as! UIViewController)
        } else {
            return nil
        }
    }

    // Page Controlを表示する(以下のコードを書いただけで自動で表示されます)
    func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
        return pageList.count
    }    
    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
        return 0
    }
}

しばしば文句を言いたくなるXcodeですが、いいところもありますね😅

追記:【Swift】UIPageViewControllerの使い方。PageControlの色を変更する。 | はじはじアプリ体験記を見たら良いコードだったので真似させていただきました。