UIPageViewController detecta gestos de paneo

¿Hay alguna forma de determinar la location de panorámica de un UIPageViewController mientras se desliza hacia la izquierda / derecha? He estado intentando lograr esto pero no funciona. Tengo un UIPageViewController agregado como una subvista y puedo deslizarlo horizontalmente a la izquierda / derecha para cambiar entre páginas; sin embargo, necesito determinar las coorderadas x, y de donde estoy desplazándome en la pantalla.

Me di count de cómo hacer esto. Básicamente, un UIPageViewController usa UIScrollViews como sus subvenciones. Creé un ciclo y establecí todas las subvenciones que son UIScrollViews y asigné sus delegates a mi ViewController.

/** * Set the UIScrollViews that are part of the UIPageViewController to delegate to this class, * that way we can know when the user is panning left/right */ -(void)initializeScrollViewDelegates { UIScrollView *pageScrollView; for (UIView* view in self.pageViewController.view.subviews){ if([view isKindOfClass:[UIScrollView class]]) { pageScrollView = (UIScrollView *)view; pageScrollView.delegate = self; } } } - (void)scrollViewDidScroll:(UIScrollView *)scrollView{ NSLog(@"Im scrolling, yay!"); } 

Mi preference personal es no confiar demasiado en la estructura interna del PageViewController porque puede modificarse más tarde, lo que romperá su código, sin que lo sepa.

Mi solución es utilizar un reconocedor de gestos panorámicos. Dentro de viewDidLoad , agregue lo siguiente:

 let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handler)) gestureRecognizer.delegate = yourDelegate view.addGestureRecognizer(gestureRecognizer) 

Dentro de la definición de yourDelegate , debe implementar el siguiente método para permitir que su gestor de reconocimiento procese los toques

 func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true } 

Ahora, deberías poder acceder a la location X / Y de los toques del usuario:

 func handler(_ sender: UIPanGestureRecognizer) { let totalTranslation = sender.translation(in: view) //... }