В настоящее время я пытаюсь реализовать PageViewController так же, как в примере ниже (я предполагаю, что они также используют один).
Мой код настроен, но я все еще изо всех сил пытаюсь получить правильную анимацию: если быть точным, то (как в примере), когда вы проводите основным видом, кажется, что вид слева был ниже Главное все время. Как они по-прежнему немного отображаются из основного ViewController?
Кроме того, я понял, что смахивание кажется намного более резким, чем в моем приложении, как будто на краю были магниты.
Нужно ли работать с ограничениями или для этого нужно кодирование?
Это даже PageViewController или только подпредставление внутри представления?
Мой код на тот случай, если он нужен:
import UIKit
import Firebase
class RootPageViewController: UIPageViewController, UIPageViewControllerDataSource {
lazy var viewControllerList:[UIViewController] = {
let sb = UIStoryboard(name: "Main", bundle: nil)
let vc1 = sb.instantiateViewController(withIdentifier: "timelineView")
let vc2 = sb.instantiateViewController(withIdentifier: "mainView")
return [vc1, vc2]
}()
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
if let secondViewController = viewControllerList[1] as? MainViewController {
self.setViewControllers([secondViewController], direction: .forward, animated: true, completion: nil)
secondViewController.buttonAdd.action = #selector(addData(_:))
secondViewController.buttonReminder.addTarget(self, action: #selector(goToReminder(_:)), for: .touchUpInside)
secondViewController.buttonSettings.addTarget(self, action: #selector(goToSettings(_:)), for: .touchUpInside)
secondViewController.buttonUser.addTarget(self, action: #selector(goToProfile(_:)), for: .touchUpInside)
}
}
@objc func addData(_ sender: Any) {
performSegue(withIdentifier: "goToAdd", sender: self)
}
@objc func goToReminder(_ sender: Any) {
performSegue(withIdentifier: "goToNotifications", sender: self)
}
@objc func goToSettings(_ sender: Any) {
performSegue(withIdentifier: "goToSettings", sender: self)
}
@objc func goToProfile(_ sender: Any) {
if let user = Auth.auth().currentUser {
self.performSegue(withIdentifier: "goToEdit", sender: self)
} else {
performSegue(withIdentifier: "goToProfile", sender: self)
}
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let vcIndex = viewControllerList.firstIndex(of: viewController) else { return nil }
let previousIndex = vcIndex - 1
guard previousIndex >= 0 else { return nil }
guard viewControllerList.count > previousIndex else { return nil }
return viewControllerList[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let vcIndex = viewControllerList.firstIndex(of: viewController) else { return nil }
let nextIndex = vcIndex + 1
guard viewControllerList.count != nextIndex else { return nil }
guard viewControllerList.count > nextIndex else { return nil }
return viewControllerList[nextIndex]
}
}