カテゴリー: iOS

[Swift]UIPageViewControllerを使ってみよう!

はじめに

こんにちはnukkyです。
以前コメントにてUIPageViewControllerの使い方がわからないとのコメントを頂いたので簡単に使い方を紹介したいと思います。

前提条件

Xcode 9.1
iOS 11 Simulator
Swift 4.0

 

UIPageViewControllerとは

簡単に説明するとUIViewControllerを複数同等な関係性で配置でき、それをスワイプ操作で遷移させられるものです、ものすごくざっくりいうとtabbarのtabが無いような形です。

 

実装

ViewControllerを準備

今回は3画面でサンプルを作成したいと思います。
3つ適当なViewControllerをファイルとStoryBoardに用意してください。
今回サンプルではFirstViewController、SecondViewController、ThirdViewControllerを用意したものとしてコードを書いていきます。

UIPageViewControllerを準備

まずUIPageViewControllerクラスを継承したファイルを作成してください。
今回のサンプルコードではPageViewControllerとしています。

import UIKit

class PageViewController: UIPageViewController {

StoryboardにUIPageViewControllerを作成しPageViewController関連付けをしてください。
このStoryboardにはFirstViewController、SecondViewController、ThirdViewControllerが用意されているのが前提とします。

最初の画面を設定

起動時にFirstViewControllerが表示されるように設定したいと思います。

class PageViewController: UIPageViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.setViewControllers([getFirst()], direction: .forward, animated: true, completion: nil)
        self.dataSource = self
    }
    
    func getFirst() -> FirstViewController {
        return storyboard!.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
    }
    
    func getSecond() -> SecondViewController {
        return storyboard!.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
    }
    
    func getThird() -> ThirdViewController {
        return storyboard!.instantiateViewController(withIdentifier: "ThirdViewController") as! ThirdViewController
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

setViewControllersでgetSecondもしくはgetThirdを行うことで最初に表示する画面をFirstViewController以外にすることも可能です。

UIPageViewControllerDataSourceの編集

UIPageViewControllerDataSourceを編集し画面を切り替えの設定を行います。

extension PageViewController : UIPageViewControllerDataSource {
    
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        
        if viewController.isKind(of: ThirdViewController.self) {
            return getSecond()
        } else if viewController.isKind(of: SecondViewController.self) {
            return getFirst()
        } else {
            return nil
        }
    }
    
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        
        if viewController.isKind(of: FirstViewController.self) {
            return getSecond()
        } else if viewController.isKind(of: SecondViewController.self) {
            return getThird()
        } else {
            return nil
        }
    }
}

現在の画面を判断しpageViewController(___After_)、pageViewController(___before_)メソッドで適切な画面を返すようにしています。今回はループをしないようにnilを返している箇所もありますがここでViewControllerを返すことで画面をループさせることも可能です。

 

さいごに

かなり駆け足でしたがUIPageViewControllerの基礎的な使い方の紹介になります。ちょっと知識がないと敷居が高いように感じますが使うだけならこのように結構簡単にいけますし、使いどころもあると思うので是非使ってみてください。

nukky

シェア
執筆者:
nukky
タグ: Swift

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

3週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前