2010-12-16 1 views
13

UIPanGestureRecognizer에 약간의 문제가 있습니다. 사용자가 왼쪽으로 패닝하는 경우 인식기가 UIGestureRecognizerStateEnded 상태를보고하지UIPanGestureRecognizer가 사용자가 x 및 y를 음수 방향으로 패닝하면 "종료"또는 "취소"로 전환하지 않습니다.

사용자가 자신의 손가락을 리프트 할 때 원하는 방향 양수이면 UIGestureRecognizerStateEnded로 상태 변경하지만 (마이너스 x 및 y 지시 수단) 두 방향 모두 음수 또는 0 인 경우에만 작업을보고하는 것을 중지합니다.

사용자가 주위를 끌면 그 오버레이보기를 숨기고 그보기가 실패로 돌아 가지 않는 것이므로 이것은 나쁘다.

물론 시간이 지나면 자동으로 오버레이를 표시하도록 NSTimer를 설정할 수 있지만 내 코드에는 명백한 오류가 나타나지 않으며 깨끗하게 처리하고 싶습니다.

내가 놓친 것이 있습니까? Apple Bug입니까?

초기화이 같다 :

pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panRecognized:)]; 
[self addGestureRecognizer:pan]; 
[pan release]; 

취급 기능은 다음과 같다 :

- (void)panRecognized:(UIPanGestureRecognizer *)gestureRecognizer { 
    switch ([gestureRecognizer state]) { 
     case UIGestureRecognizerStateBegan: 
      // fade some overlaying views out 
      break; 
     case UIGestureRecognizerStateEnded: 
     case UIGestureRecognizerStateCancelled: 
     case UIGestureRecognizerStateFailed: 
      // fade in the overlays 
      break; 
     default: 
      break; 
    } 

    // handle panning 
} 
+3

제스처 인식기를 실수로 제거하거나 다른보기로 옮겼던 과거에는 이런 일이있었습니다. 당신이하는대로 곧 침묵 할 것입니다. 귀하의 경우에는 그렇지 않습니다. – Kalle

+0

정확히 무슨 일이 벌어지는 지 모르지만 가능한 모든 UIGestureRecognizerStates를 고려하여 상태 변경을 기록하여 상호 작용하는 동안 일어나는 일을 확인하십시오. –

+0

나에게도 일어났습니다. 'uiview.addGestureRecognizer'를 VC의'viewDidLayoutSubviews'에서'viewWillAppear'로 옮겨 가면서 여전히 정당성을 찾고 있습니다. – Jokester

답변

0

라인

[자기 addGestureRecognizer : PAN];

이 나에게 잘못되었습니다.

UIViewController이 아닌 UIView 내부에서 제스처 인식기를 만드는 것처럼 보입니다. 따라서 뷰가 dealloc이면 제스처 인식기가 모두 사라집니다.

UIViewController에서 제스처 인식기를 만드는 것이 좋습니다. 또한 UIViewController은 인식기에 대한 강점을 유지해야합니다.