plantilla 'Página-Based aplicación' proporcionan estos 2 métodos:
- (NSUInteger)indexOfViewController:(DataViewController *)viewController;
un método para encontrar índice dado un controlador de vista
- (DataViewController *)viewControllerAtIndex:(NSUInteger)index
un método para crear instancias 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 plantilla basados en página son perfectos para eso. Luego, simplemente compare su índice de '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];
}
Al menos en iOS 6, '-setViewControllers: direction: animated: completion:' no se llama si la transición se inició con un gesto. Lo intenté. – jrc