ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • UIGestureRecognizer in - UITapGestureRecognizer 탭 이벤트를 받자
    프로그래밍/아이폰 2011. 4. 14. 19:50

    * 본 내용은 아이폰/패드 개발과 관련된 내용입니다.(iOS, Xcode)
    * 예제 소스코드는 글의 가장 아래에 있습니다. 급하신분은 망설이지 말고 내리세요. ^^

    * 본문에 포함된 클래스명들의 링크는, Apple문서, 혹은 자세히 설명된 참조문서들입니다.



    우리는 항상 사용자의 입력을 받아야 하겠죠.
    특수한 몇몇 application을 제외하면 대부분은 사용자의 입력에 반응해서 무언가 결과를 
    보여줘야만 합니다.

    swipe, pan, tap ... 등 더 많은 많은 상호 작용이 가능할지도 모릅니다.
    TouchesBegane, ended...등을 커스텀해서 원하는 제스쳐를 만들어낼 수 있습니다.
    때때로 HitTest 역시 도움이 될지도 모릅니다.

    하지만 자연스러운 제스쳐를 감지하기위해서 상당히 많은 노력이 필요합니다.
    그에 걸맞는 많은 코딩도 필요하며, 
    더불어, 정상적으로 작동한다는 보장도 없지요.

    특히나 저처럼 수학을 잘 못하는 분들께서 쌍수를 들고 환영할만한 클래스입니다.
    iOS3.2부터 공개되었던 나름대로 고전 클래스이지만, 이상하게 iOS4 이후가 되고나서야
    많은 분들이 사용하고 계신것 같아보이네요.

    UIGestureRecognizer 의 수많은 서브클래스들이 많은 작업을 편하고,
    제대로 작동하도록 도와줍니다.

    * 애플문서의 이벤트 핸들링부분에  자세히 설명되어있습니다.(Jump)

     


    애플 문서에서 설명되어 있는 장면입니다. 제스처를 인식해서 타겟에게 메시지를 전달합니다.

    이번에 적을 내용은 가장 간단한 탭제스쳐뿐입니다. 
    사실 탭만 인식하려면, Touches...시리즈가 더 편할지도 모르겠네요. ^^






    - Example


    시나리오는
    제스쳐Recognizer 생성 & 타겟설정 -> 사용할 뷰에 recognizer추가 -> 땡큐
    입니다.


    생성 및 등록

     UITapGestureRecognizer *tapGesture;

     tapGesture = [[[UITapGestureRecognizer alloc] initWithTarget:self           
                            
    action:@selector(gestureTapped:)] autorelease]; 

     tapGesture.delegate = self

     tapGesture.numberOfTapsRequired = 1;

        

     [self.view addGestureRecognizer:tapGesture];

     

    numberOfTapsRequired의 설정으로 탭과 더블탭 쓰리탭(?)... 등을 설정해두면
    해당 카운트가 되었을때에 메시지가 전달됩니다.
    셀렉터를 지정해주는것 꼭 기억하시구요.


    해당 이벤트(여기서는 1번 탭)가 발생하면 지정한 메소드를 호출합니다.
    물론, 당연히 아시겠지만, 해당 메소드는 구현해 두셔야합니다.~


    - (void)gestureTapped:(UIGestureRecognizer *)sender{

        if (sender.state == UIGestureRecognizerStateEnded) {

            NSLog(@"tapped");

        }

    }
     
     



    댓글

Designed by Tistory.