2011-11-28 1 views
1

UIScrollView 내부의보기에서 단일 탭을 결정하려고합니다. 문제는 UIScrollview가 모든 제스쳐를 잡는다는 것입니다. UIScrollView가 끌기와 꼭지 사이를 결정합니다.

는 지금까지 시도하는 것 : 내있는 UIScrollView에서 다음 메소드를 오버라이드 (override) : 이것은 잘 작동

-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view 
{ 
    UITouch *touch = [touches anyObject]; 
    if([touch tapCount]== 2) return YES; 

    return NO; 
} 

, 지금 불행하게도 나는 단지 더블 탭 인해를 검색 할 수 있습니다, 내 UIView의에 UITapGestureRecognize에 도달 할 수 [touch tapCount] == ​​1은 항상 호출됩니다 (UIScrollView를 드래그 또는 확대/축소). 그러나 실제로는 UIScrollview에는 "단일 탭 기능"이 필요하지 않습니다.

이 방법 내에서 드래그 (스크롤 또는 확대/축소)와 단일 Tap 사이를 결정하는 방법이 있습니까? 나는 그것을 찾을 수 없습니다 .. 사전에

-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view 

감사를 Fabi

답변

6

터치가 스크롤보기를 스크롤하지 않으면 탭 인식기 만 성공하는 것 같습니다. 스크롤보기가 스크롤을 위해 팬 제스처 인식기를 사용하기 때문에 이것은 매우 쉽습니다. 에서 iOS 5에서 방금이 작업을 수행 할 수 있습니다

[self.tapRecognizer requireGestureRecognizerToFail:self.scrollView.panGestureRecognizer]; 

를 사용하면 이전 버전의 iOS를 지원하려면,이 작업을 수행해야한다 :

for (UIGestureRecognizer *recognizer in self.scrollView.gestureRecognizers) { 
    if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) 
     [self.tapRecognizer requireGestureRecognizerToFail:recognizer]; 
+0

ios4에서이 코드에 문제가 있습니다. 내 자신의 인식기로 uiscrollview에서 제스처를 잡습니다. pan.delaysTouchesBegan = YES; pan.delaysTouchesEnded = NO; 이 설정은 ios5에서 올바르게 작동합니다. 제스처 인식기 대리자가 shouldReceiveTouch 메서드에서 YES를 반환하면 scroll 제스처가 scrollViewDidScroll을 사용하여 변경 내용을 호출하지 않았습니다. –

0

touchesShouldBegin:가있는 UIView에 위임 방법이다. 그것은 UIGestureRecognizer의 일부가 아닙니다.

UITapGestureRecognizer를 만들고 인식기를 트리거 할 탭 수를 설정하여보기에 추가해야합니다. 당신의있는 ScrollView가 컨트롤러에 연결된 UIView의에 속하는 - 나는 당신을 믿고있어

Here is the documentation for UITapGestureRecognizer

+0

안녕하세요 랜달, 당신 answere 주셔서 감사합니다. touchesShouldBegin은 UIView의 델리게이트가 아니라 UIScrollView에서 상속받습니다. http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIScrollView_Class/Reference/UIScrollView.html 물론 UIGestureRecognizer를 만들었습니다. 하지만 문제는 UITapGestureRecognizer를 소유하고있는 내 UIView가 UIScrollView 내부에 있고 ScrollView가 모든 제스처를 잡는다는 것입니다. 메서드 touchesShouldBegin을 재정의하면 제스처를 잡아 내 UIView에 전달할 수 있습니다. 그러나 드래그와 탭 사이에서 어떻게 결정할 수 있습니까? – Fabi

+0

다른 제안이 없습니까? – Fabi

0

는 "단일 탭"을 의미했다. 탭 제스처 인식기를 해당 UIView에 지정하십시오. 모든 제스처에서 첫 번째 추천을 얻은 다음 관심이없는 질문을 전달합니다.