2013-10-13 2 views
9

UIPanGestureRecognizer이 잠시 동안 특정보기에서 작동하지 않는다는 iOS 7 사용자의 간헐적 인 보고서가 나타납니다. 보기를 오른쪽/왼쪽으로 스 와이프 할 수 있어야하지만, 알려지지 않은 이유로 작동하지 않습니다. 강제로 응용 프로그램을 종료하고 다시 시작하면 문제가 해결됩니다.UIPanGestureRecognizer가 iOS 7에서 작동하지 않는 경우가 있습니다.

이 문제는 아이폰 OS 6에 이런 일이 없었는데 그리고 나는 단지 인식 수평 팬에 제스처를 강제로 gestureRecognizerShouldBegin 대표 외에 언제든지 제스처 인식기를 비활성화하는 코드가 없습니다 :

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer { 

    if ([gestureRecognizer isMemberOfClass:[UIPanGestureRecognizer class]]) { 

     CGPoint translation = [gestureRecognizer translationInView:[self superview]]; 

     if (fabsf(translation.x) > fabsf(translation.y)) { 

      if (translation.x > 0) 
       return YES; 
     } 
    } 
    return NO; 
} 

했나를 이 문제의 원인이 될 수있는 UIPanGestureRecognizer (또는 단지 일반 UIGestureRecognizer)의 내용이 변경 되었습니까?

+0

제스처 인식기가 작동하지 않는 것으로 보이는 동안'x> y' 검사가 조기 종료를 일으키지 않는 것을 확인 했습니까? – RyanR

+0

불행히도 내 장치에서 버그를 재현 할 수는 없지만 자신이하는 일을 모르는 단일 사용자 만은 아니라는 것을 알 수있는 충분한 보고서를 사용자로부터 받았습니다. – bmueller

+1

나는 몇 번이나 일어날 수있다. 'gestureRecognizerShouldBegin'가 호출되어'YES'를 올바르게 반환하지만,'UIPanGestureRecognizer'에 할당 한 메소드는 호출되지 않습니다. 그래서 제스처를 인식하지만 메서드를 호출하지 않습니다 ... – bmueller

답변

12

마침내이 문제가 해결 된 것 같습니다. 분명히 iOS 7은 iOS 6 이전 버전과 다른 방식으로 하위보기에서 제스처를 처리합니다. 이를 처리하기 위해 Apple은 새로운 대표단을 구현했습니다.

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 

예를 반환하면 제스처 인식기가 작동해야합니다. 나는 그것을 구현했고 지금까지 어떤 문제도 없었습니다 (비록 이것이 확실하게 재현 할 수없는 희귀 한 버그 였음에도 불구하고 아직 재발하지 않았을 가능성이 있음).

자세한 내용은 https://stackoverflow.com/a/19892166/1593765을 참조하십시오.

+1

놀라워요! 고맙습니다! :-) – kernix

+0

나는이 버그가 UIPanGestureRecognizer와 함께있어, 방향이 왼쪽/오른쪽 대리자에서 작동하지 않는다는 것을 항상 알 수있다. 어떤 종류의 이미지에서 설명을 찾을 수 없다. (그러나이 대답에 대한 대리자 메소드를 변경할 때 모든 것이 작동한다.) 감사합니다. ! –

+0

굉장한 팁! 이것에 대해 두 시간을 보내십시오! –

0

gestureRecognizerShouldBegin : 운동이 수직적 인 이유 때문에 제스처 인식기에서 NO를 반환하는 이유는 무엇입니까? 손가락으로 (사용자가 기계로 만들지 않은) 제스처이기 때문에 움직이는 손가락의 부정확성으로 인해 움직임에 임의성이 항상 존재합니다. gestureRecognizerShouldBegin : 사용자가 화면을 터치 한 직후에 호출되며 사용자가받는 번역은 단지 몇 픽셀 일 수 있습니다. 사용자가 인식자를 실패하면 화면에 손가락을 대고 2 픽셀 위로 이동합니다 (오른쪽으로 200 픽셀 이동하더라도). 제스처 인식기가 영구적으로 사용 중지되어서는 안되지만 사용자가 제스처 인식이 아무 이유없이 인식되지 않을 때 사용자를 혼동시킬 수 있기 때문에 제스처 인식기를 영구히 사용하지 않아야합니다.

관련 문제