我想自定义UIPageViewController
;的导航行为 具体来说,我想根据用户在屏幕上拖动她/他的手指的位置导航到不同的页面。关于从哪里开始的任何指示?
问问题
422 次
1 回答
1
页面视图控制器的 curl 导航由 aUIPanGestureRecognizer
和触发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];
}
在我的测试中,我只需要询问平移手势识别器的位置。当手势是平移时,两个识别器都处于“可能”状态。当手势是点击时,平移识别器处于“失败”状态,但无论如何它都会报告点击触摸的位置。
当然,这不是记录在案的行为。如果您不想依赖它,则需要以其他方式访问当前触摸的位置。我可能只是使用一个子类UIWindow
并覆盖它sendEvent:
来将最近的触摸事件保存在一个实例变量中以便于访问。
于 2013-03-09T09:10:17.390 回答