2012-06-29 3 views
4

나는이 시간을 불에 태웠습니다. UIPageViewControllerUIPageViewControllerNavigationOrientationHorizontal으로 초기화했지만 사용자가 수직으로 팬하면 어떤 이유로 viewControllerBeforeViewController이 호출됩니다.방향이 수평으로 설정된 경우 UIPageViewController가 수직 팬에 응답합니다.

또한이 경우 페이지 반전이없고 didFinishAnimating:didFinishAnimating:previousViewControllers:transitionCompleted이 전혀 호출되지 않습니다. 이 .. 페이지 뷰 컨트롤러이 수직 운동입니다 알고 있다는 것을 의미

이 초기화 코드 -

- (void)initPageViewController 
{ 
    self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl 
                   navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal 
                      options:nil]; 
    self.pageViewController.delegate = self; 
    self.pageViewController.dataSource = self; 

    [self addChildViewController:self.pageViewController]; 
    [self.view addSubview:self.pageViewController.view]; 

    // Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages. 
    self.pageViewController.view.frame = self.view.bounds; 

    [self.pageViewController didMoveToParentViewController:self]; 

    // Leave only pan recognizers enabled, so buttons positioned inside a page would work. 
    for (UIGestureRecognizer *gr in self.pageViewController.gestureRecognizers) 
    { 
     if ([gr class] != [UIPanGestureRecognizer class]) 
      gr.enabled = NO; 
    } 
} 

어떤 아이디어?

답변

7

나는 처음에는 같은 문제에 직면했을 때 당신의 질문에 우연히 마주 쳤습니다. 그러나 제 상황에 맞게 수정 한 것 같습니다.

기본적으로 내가해야 할 일은 UIPageViewController에 첨부 된 모든 제스처 인식기에 대한 대리인을 설정하는 것입니다. 그래서, 곧 UIPageViewController를 생성 한 후, 내가 그랬어 :

for (UIGestureRecognizer *gr in self.book.gestureRecognizers) 
    gr.delegate = self.book; 

book 내 사용자 정의 UIPageViewController (I 본질적으로 대리인으로 자신을 설정했다)입니다. 마지막으로이 방법을 UIPageViewController에 추가하여 세로 패닝을 제한하거나 가로 패닝을 제한하기 위해 주석 처리 된 선을 사용하십시오.

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) 
    { 
     UIPanGestureRecognizer *panGestureRecognizer = (UIPanGestureRecognizer *)gestureRecognizer; 
     CGPoint translation = [panGestureRecognizer translationInView:self.view]; 

     return fabs(translation.x) > fabs(translation.y); 
//  return fabs(translation.y) > fabs(translation.x); 
    } 
    else 
     return YES; 
} 

내가 this answer이 덕분으로 암시했다 - 당신이 UIPanGestureRecognizer의 만 필터링해야합니다.

+0

이 시도했지만 나에 대한 인식기 첫 이벤트 후 붙어 얻고 항상 이후에 동일한 변환 값을 반환합니다 ... – Lvsti

+0

이 스레드에서 다른 가능한 솔루션을 게시했습니다 : http://stackoverflow.com/questions/12533240/ uipageviewcontroller-gesture-is-calling-viewcontroller가 나오지만 애니메이션이 아니라면 체크 아웃 할 수 있습니다. – Lvsti

+0

환호성 아메드, 해결했습니다. 비록 이것이 왜 페이지 뷰 컨트롤러에 의해 이루어지지 않는지 이해할 수는 없지만. – Kof

관련 문제