본문 바로가기

iPhone

UIGestureRecognizer 사용

Inherits from   NSObject
Conforms to  NSObject (NSObject)
Framework  /System/Library/Frameworks/UIKit.framework
Availability  Available in iOS 3.2 and later.
Companion guide  Event Handling Guide for iOS
Declared in

UIGestureRecognizer.h
UIGestureRecognizerSubclass.h

ios 3.2부터 지원하는 제스처에 대한 상위 클레스로 각종 터치이벤트를 케치하는 하위 클레스들이 상속받아 사용합니다.



각각의 클레스들은 UIView에서 일어나는 제스처 이벤트를 잡아내어 처리해 줍니다.

코드에서 사용법 


// 뷰를 만든 후 (  registrationFirstView = UIView를 상속받는 커스텀 뷰 )
registrationFirstView

    = [[[NSBundle mainBundle] loadNibNamed:@"RegistrationFirstView" owner:self options:nil]lastObject];

//제스처를 만들고 selector 등록해 준다.   제스처6가지는 모두 동일한 방법으로 추가한다.

 UITapGestureRecognizer* clickBg = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];

//제스처 등록  arc를 사용한 예제이기 때문에 따로 release는 하지 않았습니다.

    [registrationFirstView addGestureRecognizer:clickBg];



//ios developer 라이브러리의 example 핸들러 코드 

- (void)handleTap:(UITapGestureRecognizer *)sender

{

    if (sender.state == UIGestureRecognizerStateEnded){     }   // handling code

}



터치 이벤트의 상태  ( 핸들러에서 sender.state 로 사용 if, switch사용가능  UIGestureRecognizerState로 리턴된다.  )

UIGestureRecognizerStatePossible,   // 이벤트를 받기  기본상태

UIGestureRecognizerStateBegan,      // 이벤트 시작 상태

UIGestureRecognizerStateChanged,    // 상태가 변화되었을 

UIGestureRecognizerStateEnded,      // 제스처가 끝났을 경우

UIGestureRecognizerStateCancelled,  // 인식이 취소(실패) 되었을  UIGestureRecognizerStatePossible 재설정

UIGestureRecognizerStateFailed,// 인식   없는 터치가 들어왔을  UIGestureRecognizerStatePossible 재설정


ex)
//핸들러 안에서 사용 
CGPoint touchPoint = [sender locationInView:sender.view];
CGPoing movePoint = [sender translationInView:sender.view];

switch( sender.state ){

case UIGestureRecognizerStateBegan:
NSLog(@"시작 : %@",NSStringFromCGPoint(touchPoint));
break;

case UIGestureRecognizerStateChanged:
NSLog(@"이벤트 중 : %@",NSStringFromCGPoint(movePoint));
break;

case UIGestureRecognizerStateEnded:
NSLog(@"종료 : %@",NSStringFromCGPoint(touchPoint));
break;

case UIGestureRecognizerStateEnded:
NSLog(@"실패 : %@",NSStringFromCGPoint(touchPoint));
break;

}