将PageCurl转换为使用UIPageViewController进行滚动

我想在视图之间改变我的animation。 目前我有PageCurl,但我想有像Snapchat一样的滚动animation。

我不能使用var transitionStyle: UIPageViewControllerTransitionStyle { get }

在这里输入图像说明

我的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. } } 

从Apple Docs :

“该属性的值是在页面视图控制器初始化时设置的,不能更改。”

初始化时必须指定转换样式。 如果你在代码中这样做,你将需要像这样的东西:

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

(由于ViewControllerUIPageViewController的子类)

如果要在故事板中设置页面视图控制器,请修改属性检查器中的转换样式:

属性检查器的图像

如果您需要使用storyboard,并且仍然需要在代码中设置转换样式,则可以在inheritance了UIPageViewController的Class中使用此技巧。 诀窍是,在调用init的代码中,你可以调用super.init(),它的转换风格就像这样

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