我有一个UIPageViewController,我只是不知道如何知道用户将页面翻到了什么方向,这样我才能适当地设置页面计数。
谢谢沙尼
发布于 2012-01-06 09:00:34
当用户翻页时,将调用UIPageViewController的setViewControllers:
方法。此方法接收UIPageViewControllerNavigationDirection
类型的参数,该参数将为您提供所需的信息。
发布于 2012-01-16 01:01:48
在手势驱动的转换完成后,此委托method被调用:
pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:
因此,通过比较previousViewControllers
参数和pageViewController.viewControllers
,您可以知道方向。
发布于 2012-01-09 19:10:26
“基于页面的应用程序”模板提供了以下两种方法:
- (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];
}
https://stackoverflow.com/questions/8751633
复制相似问题