我想定制UIPageViewController
的导航行为;具体而言,我想根据导航到不同的页面,其中屏幕用户拖动她/他的手指。任何指针从哪里开始?定制UIPageViewController的导航行为
0
A
回答
1
页面视图控制器的卷曲导航由UIPanGestureRecognizer
和UITapGestureRecognizer
触发。你可以在页面视图控制器的gestureRecognizers
属性中找到这些。
在您的pageViewController:viewControllerBeforeViewController:
方法和pageViewController:viewControllerAfterViewController:
方法中,您可以要求平移手势识别器在页面视图控制器的视图中查找它的位置,并使用它来决定在哪里进行导航。您可能想要将决定委托给当前显示的视图控制器。
static UIPanGestureRecognizer *panRecognizerOfPageViewController(UIPageViewController *pageViewController) {
for (id recognizer in pageViewController.gestureRecognizers) {
if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]])
return recognizer;
}
return nil;
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)vc
{
DetailViewController *dvc = (DetailViewController *)vc;
UIPanGestureRecognizer *panner = panRecognizerOfPageViewController(pageViewController);
CGPoint point = [panner locationInView:dvc.view];
return [dvc priorViewControllerWithPoint:point];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)vc
{
DetailViewController *dvc = (DetailViewController *)vc;
UIPanGestureRecognizer *panner = panRecognizerOfPageViewController(pageViewController);
CGPoint point = [panner locationInView:dvc.view];
return [dvc nextViewControllerWithPoint:point];
}
在我的测试中,我只需要询问pan手势识别器的位置。当手势是平底锅时,两个识别器处于“可能”状态。当手势是轻击时,平移识别器处于“失败”状态,但它仍报告轻击接触的位置。
当然,这不是记录行为。如果你不想依赖它,你需要以其他方式访问当前触摸的位置。我可能只是使用UIWindow
的子类并覆盖它的sendEvent:
以将最近的触摸事件保存在实例变量中以便于访问。
相关问题
- 1. 使用故事板与uipageviewcontroller和导航控制器的iPad Bug
- 2. 定制Vaadin导航
- 3. Sharepoint导航定制
- 4. 定制uitableviewcell中的导航
- 5. 定制门户导航栏
- 6. 固定导航下的固定导航固定导航
- 7. 定制引导导航与CSS
- 8. 如何在UIPageViewController的导航栏上显示按钮?
- 9. 固定定位导航的Firefox 8中的奇怪行为
- 10. 导航菜单的URL定制
- 11. 自定义导航控制器和导航栏?
- 12. 反应导航选项卡导航器特定的选项卡定制
- 13. 弹出UIPageViewController后取消隐藏导航栏
- 14. 导航控制器行为的奇怪延迟
- 15. MFMailComposeViewController打破导航控制器的行为
- 16. Jqgrid:基于选定行的导航
- 17. 侧栏导航改为导航栏中的顶部导航栏
- 18. 导航控制器,导航项目和导航栏
- 19. Zend的导航行为不端
- 20. 奇怪的行为与CSS导航栏
- 21. 棱镜请求导航的行为
- 22. 没有UINavigationController的导航式行为
- 23. 如何制作固定导航菜单?
- 24. 自定义导航控制器
- 25. Android导航抽屉定制图标
- 26. 使用N2CMS定制导航,MVC3
- 27. ZF2注册导航定制助手
- 28. 定制后退按钮在导航栏
- 29. 定制导航栏隐藏按钮
- 30. 角4个定制路由器导航
谢谢!我使用“基于页面的应用程序”模板,并将其粘贴到我的'RootViewController:UIViewController'中。它将自己设置为'viewDidLoad'中的委托:'self.pageViewController.delegate = self;'。但是'(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)vc'方法似乎不会在翻页时触发。任何指针? –
2013-03-26 19:06:06
确保您的页面视图控制器的'dataSource'连接到实现'pageViewController:viewControllerAfterViewController:'的对象。 – 2013-03-26 21:34:02
超级,它的作品! – 2013-03-27 07:09:36