Преход на PageCurl към Scroll с 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.
    }

}

person Pixel    schedule 18.01.2015    source източник


Отговори (2)


От документи на Apple:

„Стойността на това свойство е зададена, когато контролерът за изглед на страница се инициализира и не може да бъде променена.“

Трябва да посочите стила на преход, когато инициализирате. Ако направите това в код, ще ви трябва нещо като:

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

(Тъй като ViewController е подклас на UIPageViewController)

Ако настройвате контролера за изглед на страница в сценария, променете стила на прехода в инспектора на атрибути:

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

person pbasdf    schedule 18.01.2015
comment
С последната версия на Xcode избрах Flip horizontal в стил на преход в игралната площадка. но нищо не работи. Добавям и let pageViewController, но нищо не се променя :/ - person Pixel; 19.01.2015
comment
UIPageViewController има само два стила на преход: Scroll или PageCurl. FlipHorizontal е UIModalTransitionStyle, използвано, когато контролерът за изглед е представен модално. Ако искате FlipHorizontal или нещо подобно, ще трябва да използвате нещо различно от UIPageViewController. - person pbasdf; 19.01.2015
comment
Не, искам същия преход като snapchat, как мога да направя това, моля. - person Pixel; 19.01.2015
comment
Как създавате горния ViewController? Чрез разкадровка/сегмент или в код? - person pbasdf; 19.01.2015
comment
Създадох своя контролер за изглед на детската площадка със същото име в кода, поставен във въпроса. - person Pixel; 19.01.2015
comment
Трябва да използвате реда let pageViewController = .... директно в игралната площадка - не е необходимо да го добавяте в началото на дефиницията на вашия клас. - person pbasdf; 19.01.2015

Ако трябва да използвате сценария и все още трябва да зададете стила на прехода в кода, можете да използвате този трик в класа, който сте направили, наследявайки UIPageViewController. Номерът е, че в init с кодер извиквате super.init(), който приема стил на преход като този

class ViewController: UIPageViewController {

    required init?(coder: NSCoder) {
        super.init(transitionStyle: Configs.transitionStyle, navigationOrientation: .horizontal, options: nil)
    }
}
person Khaled Annajar    schedule 06.02.2017
comment
Това работи за мен, но ми пречи да не извиквам инициализатора init(coder:)... Не съм сигурен дали трябва да правим това... - person Nuno Gonçalves; 10.03.2017