шаблон «Application страницу на основе» The обеспечивают эти 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];
}
По крайней мере, на iOS 6, '-setViewControllers: direction: animated: completion:' не вызывается, если переход был инициирован жестом. Я просто попробовал. – jrc