/// 싱글탭 설정
        UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapPiece:)];       
        tapGesture.numberOfTapsRequired = 1;
       
        /// 더블탭 설정
        UITapGestureRecognizer *dbTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapPiece:)];       
        dbTapGesture.numberOfTapsRequired = 2;
       
        /// 더블탭시 싱글탭과 중복을 방지
        [tapGesture requireGestureRecognizerToFail : dbTapGesture];
       
        [dbTapGesture setDelaysTouchesBegan : YES];
        [tapGesture setDelaysTouchesBegan : YES];
       
        /// 싱글탭 뷰에 추가
        [self addGestureRecognizer:tapGesture];
        [tapGesture release];
       
        /// 더블탭 뷰에 추가
        [self addGestureRecognizer:dbTapGesture];
        [dbTapGesture release];
       
        /// 핀치 이벤트 추가
        UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scalePiece:)];
        [pinchGesture setDelegate:self];
        [self addGestureRecognizer:pinchGesture];
        [pinchGesture release];


- (void)singleTapPiece:(UITapGestureRecognizer *)gestureRecognizer
{
    if([gestureRecognizer state] == UIGestureRecognizerStateEnded) {
        SALog2(@"tap End");
    }
}
- (void)doubleTapPiece:(UITapGestureRecognizer *)gestureRecognizer
{
    if([gestureRecognizer state] == UIGestureRecognizerStateEnded) {
        SALog2(@"DoubleTap End");
    }
}
// scale the piece by the current scale
// reset the gesture recognizer's rotation to 0 after applying so the next callback is a delta from the current scale
- (void)scalePiece:(UIPinchGestureRecognizer *)gestureRecognizer
{
    [self adjustAnchorPointForGestureRecognizer:gestureRecognizer];
   
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
       
        SALog2(@"Pinch Start");
        [gestureRecognizer view].transform = CGAffineTransformScale([[gestureRecognizer view] transform], [gestureRecognizer scale], [gestureRecognizer scale]);
        [gestureRecognizer setScale:1];
       
    }else if([gestureRecognizer state] == UIGestureRecognizerStateEnded) {
        SALog2(@"Pinch End");
    }
}
// shift the piece's center by the pan amount
// reset the gesture recognizer's translation to {0, 0} after applying so the next callback is a delta from the current position
- (void)panPiece:(UIPanGestureRecognizer *)gestureRecognizer
{
    UIView *piece = [gestureRecognizer view];
   
    [self adjustAnchorPointForGestureRecognizer:gestureRecognizer];
   
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
       
        SALog2(@"Pan Start");
       
        CGPoint translation = [gestureRecognizer translationInView:[piece superview]];
       
        [piece setCenter:CGPointMake([piece center].x + translation.x, [piece center].y + translation.y)];
        [gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
       
    } else if([gestureRecognizer state] == UIGestureRecognizerStateEnded) {
       
        SALog2(@"Pan End");
    }
}

'iOS' 카테고리의 다른 글

Delegate를 사용시 주의할 점  (0) 2011.07.21
iOS 상단 Statusbar 반투명 상태로 사용하기  (0) 2011.07.09
UIView 변형 방법  (0) 2011.06.24
델리게이트 성격의 프로퍼티 설정  (0) 2011.06.15
UIImage 카메라 롤에 추가  (0) 2011.06.15

+ Recent posts