SwiftのUIPageViewControllerのページめくりのアニメーションを変える

author

SwiftのUIPageViewControllerは、ページをめくるときのアニメーションが設定されている。デフォルトはpageCurlで、他にscrollがある。Swift 4ではこの2つが用意されている。

ページめくりのアニメーションを変えるときは、そのUIPageViewControllerのinitをoverrideする。initの引数にあるtransitionStyleがポイント。

コード

以下はYourViewControllerというUIPageViewControllerのページめくりのアニメーションを変えるコードである。

YourViewController:

override init(transitionStyle style: UIPageViewControllerTransitionStyle, navigationOrientation: UIPageViewControllerNavigationOrientation, options: [String : Any]? = nil) {
super.init(transitionStyle: style, navigationOrientation: navigationOrientation, options: nil)
}

required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

このUIPageViewControllerを呼び出すとき

YourViewControllerを呼び出す側:

let v = YourViewController(transitionStyle: UIPageViewControllerTransitionStyle.scroll, navigationOrientation: UIPageViewControllerNavigationOrientation.horizontal, options: nil)

とする。

ポイント

YourViewControllerのinitの引数であるtransitionStyleを、呼び出し側でUIPageViewControllerTransitionStyle.scrollにしている。

注意

YourViewControllerの中でもアニメーションを決定できる(Swift 4、2018年8月最新)。つまりoverride initの中で、transitionStyleを定義してsuper.initのtransitionStyleに入れても、ページめくりのアニメーションは変更される。

override init(transitionStyle style: UIPageViewControllerTransitionStyle, navigationOrientation: UIPageViewControllerNavigationOrientation, options: [String : Any]? = nil) {
let t: UIPageViewControllerTransitionStyle = UIPageViewControllerTransitionStyle.pageCurl
super.init(transitionStyle: t, navigationOrientation: navigationOrientation, options: nil)
}

呼び出し側でtransitionStyleを設定せず、YourViewControllerのinitで設定するほうが簡単になる。