Шаблон «Приложение на основе страницы» предоставляет следующие 2 метода:
- (NSUInteger)indexOfViewController:(DataViewController *)viewController;
метод поиска индекса по заданному контроллеру представления
- (DataViewController *)viewControllerAtIndex:(NSUInteger)index
метод создания экземпляра контроллера представления по индексу.
Для создания правильной анимации вам нужно знать индекс вашего текущего контроллера вида. Методы шаблонов на основе страниц идеально подходят для этого. Затем вы просто сравниваете свой индекс перехода с текущим индексом.
Вот некоторый код, чтобы понять идею:
- (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];
}