Transition PageCurl pour faire défiler avec UIPageViewController

Je voudrais changer mon animation entre la vue. Actuellement, j'ai le PageCurl mais je voudrais avoir une animation de défilement comme Snapchat.

Je ne peux pas utiliser le var transitionStyle: UIPageViewControllerTransitionStyle { get }

entrez la description de l'image ici

Mon ViewController:

 import UIKit class ViewController: UIPageViewController, UIPageViewControllerDataSource{ let pageViewController = UIPageViewController(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: nil) var messagesViewController : MessagesViewController! var searchViewController : SearchViewController! var friendsViewController : FriendsViewController! override func viewDidLoad() { super.viewDidLoad() // set UIPageViewControllerDataSource self.dataSource = self // Reference all of the view controllers on the storyboard self.messagesViewController = self.storyboard?.instantiateViewControllerWithIdentifier("messagesViewController") as? MessagesViewController self.messagesViewController.title = "Messages" self.searchViewController = self.storyboard?.instantiateViewControllerWithIdentifier("searchViewController") as? SearchViewController self.searchViewController.title = "Search" self.friendsViewController = self.storyboard?.instantiateViewControllerWithIdentifier("friendsViewController") as? FriendsViewController self.friendsViewController.title = "Friends" // Set starting view controllers var startingViewControllers : NSArray = [self.searchViewController] self.setViewControllers(startingViewControllers, direction: .Forward, animated: false, completion: nil) } func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { switch viewController.title! { case "Messages": return nil case "Search": return messagesViewController case "Friends": return searchViewController default: return nil } } // pink green blue func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { switch viewController.title! { case "Messages": return searchViewController case "Search": return friendsViewController case "Friends": return nil default: return nil } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

À partir des Apple Docs :

"La valeur de cette propriété est définie lorsque le controller de vue de page est initialisé et ne peut pas être modifié."

Vous devez spécifier le style de transition lors de l'initialisation. Si vous faites cela dans le code, vous aurez besoin de quelque chose comme:

 let pageViewController = ViewController(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: nil) 

(Puisque ViewController est une sous-class de UIPageViewController )

Si vous configurez le controller de vue de page dans un storyboard, modifiez le style de transition dans l'inspecteur d'attributes:

Image de l'inspecteur d'attributs

Si vous avez besoin d'utiliser le storyboard et avez toujours besoin de définir le style de transition dans le code, vous pouvez utiliser cette astuce dans la class que vous avez héritée de UIPageViewController. L'astuce est que dans l'init avec le codeur vous appelez super.init () qui prend un style de transition comme celui-ci

 class ViewController: UIPageViewController { required init?(coder: NSCoder) { super.init(transitionStyle: Configs.transitionStyle, navigationOrientation: .horizontal, options: nil) } }