Ios 自定义UIPageViewController的导航行为
我想自定义Ios 自定义UIPageViewController的导航行为,ios,uipageviewcontroller,Ios,Uipageviewcontroller,我想自定义UIPageViewController的导航行为;具体来说,我想根据用户在屏幕上拖动手指的位置导航到不同的页面。关于从何处开始的任何指针?页面视图控制器的卷曲导航由UIPangestureRecognitizer和UICapgestureRecognitizer触发。您可以在页面视图控制器的手势识别器属性中找到这些属性 在pageViewController:viewControllerBeforeViewController:方法和pageViewController:viewCo
UIPageViewController
的导航行为;具体来说,我想根据用户在屏幕上拖动手指的位置导航到不同的页面。关于从何处开始的任何指针?页面视图控制器的卷曲导航由UIPangestureRecognitizer
和UICapgestureRecognitizer
触发。您可以在页面视图控制器的手势识别器
属性中找到这些属性
在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:
即可将最近的触摸事件保存在实例变量中,以便于访问。谢谢!我使用的是“基于页面的应用程序”模板,我已经将其粘贴到我的RootViewController:UIViewController
中。它在viewDidLoad
中将自身设置为委托:self.pageViewController.delegate=self代码>。但是(UIViewController*)pageViewController:(UIPageViewController*)pageViewController viewControllerAfterViewController:(UIViewController*)vc
方法似乎不会在翻页时触发。有指针吗?请确保您的页面视图控制器s
dataSource`已连接到实现pageViewController:viewControllerAfterViewController:
的对象。如果我已解决了您的问题,请单击我的答案旁边的复选标记。