Переход PageCurl для прокрутки с помощью UIPageViewController


Я хотел бы изменить анимацию между видами. В настоящее время у меня есть PageCurl, но я хотел бы иметь анимацию прокрутки, такую как Snapchat.

Я не могу использовать 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.
    }

}
2 5

2 ответа:

Из документов Apple :

" Значение этого свойства устанавливается при инициализации контроллера вида страницы и не может быть изменено."

При инициализации необходимо указать стиль перехода. Если вы сделаете это в коде, вам понадобится что-то вроде:

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

(поскольку ViewController является подклассом UIPageViewController)

Если вы настраиваете контроллер вида страницы в раскадровке, измените стиль перехода в инспекторе атрибутов:

Изображение инспектора атрибутов

Если вам нужно использовать раскадровку и все еще нужно установить стиль перехода в коде, вы можете использовать этот трюк в классе, который вы сделали наследующим UIPageViewController. Фокус в том, что в init с coder вы называете super.init (), который принимает такой стиль перехода

class ViewController: UIPageViewController {

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