태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

mobile/ios2011/09/08 10:27

iOS 3.2 부터 지원하는 UIGestureRecognizer 중에서 개인적으로 가장 많이 사용하는 UITapGestureRecognizer.

컴포넌트를 만들일이 생겨, 만드는중에, single tap 과 double tap 을 구분해서 사용해야할 경우가 필요했다.

일반적으로

 UITapGestureRecognizer *singleGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self

                                                                                                  action:@selector(menuTapped:)];

        singleGestureRecognizer.numberOfTapsRequired = 1;

        [menuItem addGestureRecognizer:singleGestureRecognizer];

        [singleGestureRecognizer release];

        

        UITapGestureRecognizer *doubleGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self

                                                                                                  action:@selector(menuDoubleTapped:)];

        doubleGestureRecognizer.numberOfTapsRequired = 2;

        [menuItem addGestureRecognizer:doubleGestureRecognizer];

        [doubleGestureRecognizer release];

와 같이 gesture recognizer 를 이용해서 사용을 하는데, 이렇게만 할경우,

double tap할때, single, double selector가 모두 호출이 된다.

찾아보다가 간단한 방법으로 해결할 수 있었다.

http://stackoverflow.com/questions/2833970/multiple-taps-with-uitapgesturerecognizer 에서 설명한 방법으로, 

" - (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer; "  를 이용하는 것이다.

api 를 확인해보면, 다른 gestureRecognizer 와의 관계를 설정할수 있다.

친절히 example 에 내가 하려는 것이 적혀있다. ^^

// create a relationship with another gesture recognizer that will prevent this gesture's actions from being called until otherGestureRecognizer transitions to UIGestureRecognizerStateFailed

// if otherGestureRecognizer transitions to UIGestureRecognizerStateRecognized or UIGestureRecognizerStateBegan then this recognizer will instead transition to UIGestureRecognizerStateFailed

// example usage: a single tap may require a double tap to fail

- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;


 그러면 이전 코드에서 한줄만 추가 해주면 되겠다.

[singleGestureRecognizer requireGestureRecognizerToFail:doubleGestureRecognizer]; 

간단하다. 



-----------------------------------------------------------------------------------------------------
2011.09.21 

근데, 이걸 이렇게 사용하니, SingleTap 시에 delay가 발생하네요. DoubleTap 인지 확인 때문에 발생하는 현상.
음...

Posted by THLIFE.net
TAG ,

TRACKBACK http://thlife.net/trackback/1073 관련글 쓰기

댓글을 달아 주세요