Как добавить переход с последней страницы UIPageViewController с помощью Swipe gesture

#ios #swift #uigesturerecognizer #uipageviewcontroller

#iOS #swift #uigesturerecognizer #uipageviewcontroller

Вопрос:

Я пытаюсь реализовать руководство с 3 экранами, и на последней странице, когда пользователь проводит пальцем, приложение должно перейти к основному UIViewController. Когда для источника данных pageViewController установлено значение self, жесты swipe не распознаются. Есть ли обходной путь для этого?

 class TourViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

var pageViewController: UIPageViewController!
var pageTitles: NSArray!
var pageImages: NSArray!
var pageDesc: NSArray!

override func viewDidLoad() {
    super.viewDidLoad()

    self.pageTitles = NSArray(objects: "page 1", "page 2", "page 3")
    self.pageImages = NSArray(objects: "image 1", "image 2", "image 3")
    self.pageDesc = NSArray(objects: "note 1", "note 2", "note 3")
    self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController
    self.pageViewController.dataSource = self
    var startVC = self.viewControllerAtIndex(0) as ContentViewController
    var viewControllers = NSArray(object: startVC)

    self.pageViewController.setViewControllers(viewControllers as! [UIViewController], direction: .Forward, animated: true, completion: nil)
    self.pageViewController.view.frame = CGRectMake(0, 30, self.view.frame.width, self.view.frame.size.height-60)

    self.addChildViewController(self.pageViewController)
    self.view.addSubview(self.pageViewController.view)
    self.pageViewController.didMoveToParentViewController(self)
    self.pageViewController.delegate = self

}
  

Ниже приведена функция, которую я хотел бы вызвать с помощью swipe gestures. Это работает, когда для источника данных pageViewController установлено значение nil

 func handleSwipes(sender:UISwipeGestureRecognizer) {
    if (sender.direction == .Left) {
        print("Swipe Left")
    }

    if (sender.direction == .Right) {
        print("Swipe Right")
    }
}
  

Есть ли что-нибудь, что я могу сделать в моей следующей функции?

 func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
    var vc = viewController as! ContentViewController
    var index = vc.pageIndex as Int
    print(index)
    if (index == NSNotFound) {
        return nil
    }

    index  
    if (index == self.pageTitles.count) {
        return nil
    }
    return self.viewControllerAtIndex(index)
}
  

Не удалось найти ни одного примера swift по этому поводу. Пожалуйста, помогите. Спасибо.

Комментарии:

1. Я нашел способ сделать это. Попробуйте выполнить какое-либо условие внутри функции scrollViewWillBeginDragging(_ ScrollView: UIScrollView) {} .. это сработало.

2. Спасибо за ответ, но scrollViewWillBeginDragging не вызывается ни при каком пролистывании. Чего мне не хватает?

3. Позвольте мне протестировать ваш код….

4. Я уверен, что эта функция заработала сегодня утром… позвольте мне попробовать еще раз из вашего кода…

5. Я только что нашел ответ на вашу проблему. сначала загрузите пример проекта по этой ссылке github.com/Weijay/PageViewController-Example и запустите, дайте мне знать, что вы хотите…