2013-03-08 2 views

답변

1

페이지 뷰 컨트롤러의 컬 탐색은 UIPanGestureRecognizerUITapGestureRecognizer에 의해 트리거됩니다. 페이지보기 컨트롤러의 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:을 오버라이드하여 쉽게 액세스 할 수 있도록 가장 최근의 터치 이벤트를 인스턴스 변수에 저장합니다.

+0

고마워요! 나는 "페이지 기반 응용 프로그램"템플릿을 사용하고 있으며 이것을'RootViewController : UIViewController '에 붙여 넣었습니다. 그것은'viewDidLoad'에서 델리게이트로 자신을 설정하고 있습니다 :'self.pageViewController.delegate = self;'. 그러나'(UIViewController *) pageViewController : (UIPageViewController *) pageViewController viewControllerAfterViewController : (UIViewController *) vc' 메서드는 페이지 전환시 트리거되지 않는 것처럼 보입니다. 어떤 포인터? –

+0

페이지 뷰 컨트롤러의'dataSource'가'pageViewController : viewControllerAfterViewController :'를 구현하는 객체에 연결되어 있는지 확인하십시오. –

+0

최고, 작동합니다! –