viewpager tutorial page example control ios uipageviewcontroller

ios - tutorial - ¿Cómo puedo saber si UIPageViewController dio la vuelta o se invirtió?



uipageviewcontroller swift 4 (6)

Tengo un UIPageViewController y simplemente no puedo descubrir cómo saber en qué dirección el usuario dio vuelta a la página para que pueda establecer el recuento de páginas de manera adecuada.

Gracias shani


Como dijo Hejazi

Después de que una transición guiada por gestos completa este method delegado se llama:

pageViewController: didFinishAnimating: previousViewControllers: transitionCompleted:

La parte que se debe aclarar es que se completed con YES si la página se dio vuelta por completo y NO si la página en realidad no se volvió. El caso de NO ocurre, por ejemplo, cuando el usuario simplemente levanta la esquina de la página y luego la vuelve a colocar sin voltear la página.

Este es el concepto que querrá implementar:

- (void)pageViewController:(UIPageViewController *)pvc didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed { // If the page did not turn if (!completed) { // You do nothing because whatever page you thought // the book was on before the gesture started is still the correct page return; } // This is where you would know the page number changed and handle it appropriately // [self sendPageChangeNotification:YES]; }


Después de que una transición guiada por gestos completa este method delegado se llama:

pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:

Entonces, al comparar el parámetro previousViewControllers y pageViewController.viewControllers puede conocer la dirección.


Grandes respuestas para el manejo del controlador de página. Descubrí que el controlador de vista que se agregó como una página llamará a viewWillAppear cuando el usuario deslice la página a la vista y también llamará a viewDidAppear cuando se complete.


La plantilla ''Aplicación basada en página'' proporciona estos 2 métodos:

- (NSUInteger)indexOfViewController:(DataViewController *)viewController;

un método para encontrar el índice dado un controlador de vista

- (DataViewController *)viewControllerAtIndex:(NSUInteger)index

un método para crear una instancia de un controlador de vista dado un índice.

Para realizar la animación correcta, necesita conocer el índice de su controlador de vista actual. Los métodos de plantillas basadas en páginas son perfectos para eso. Luego, simplemente compare su índice ''saltar a'' y su índice ''actual''.

Aquí hay un código para obtener la idea:

- (void)jumpToPage:(NSInteger)page { // find current index DataViewController *currentViewController = (DataViewController *)[self.pageViewController.viewControllers lastObject]; NSUInteger index = [self indexOfViewController:currentViewController]; // choosing the correct direction // if the ''current'' is smaller than the ''jump to'' page, then choose forward // vice versa UIPageViewControllerNavigationDirection direction; if (index < page) { direction = UIPageViewControllerNavigationDirectionForward; } else { direction = UIPageViewControllerNavigationDirectionReverse; } // choose view controllers according to the orientation NSArray *viewControllers; if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) { DataViewController *rightViewController = [self viewControllerAtIndex:page]; viewControllers = [NSArray arrayWithObject:rightViewController]; } else { DataViewController *rightViewController = [self viewControllerAtIndex:page]; DataViewController *leftViewController = [self viewControllerAtIndex:page-1]; viewControllers = [NSArray arrayWithObjects:leftViewController, rightViewController, nil]; } // fire the method which actually trigger the animation [self.pageViewController setViewControllers:viewControllers direction:direction animated:YES completion:nil]; }


Podría agregar una propiedad "pageIndex" a sus controladores de vista que sirven como páginas. IOW, cuando cree los controladores de vista para viewControllerBeforeViewController & viewControllerAfterViewController (o cuando llame a setViewControllers), almacene un pageIndex en los controladores de vista a los que puede hacer referencia cuando necesite conocer el índice.


Cuando el usuario gire una página, se setViewControllers: método setViewControllers de setViewControllers: . Este método recibe un argumento de tipo UIPageViewControllerNavigationDirection que le dará la información que necesita.