티스토리 뷰

iOS/자료정리

[iPhone]제스쳐 ( Gesture )

썩소천사 2011. 7. 12. 14:50
반응형


화면 전환이나 어떠한 효과를 줄 때 touchBegan, touchesEnded에서 처리하고는 했는데

아래와 같이 콜백만 등록해 주면 되는 것도 있다.


UISwipeGestureRecognizer *swipeGestureLeft = [[UISwipeGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSwipeGestureLeft:)];
[self.view addGestureRecognizer:swipeGestureLeft];
swipeGestureLeft.direction = UISwipeGestureRecognizerDirectionLeft;
[swipeGestureLeft release];
UISwipeGestureRecognizer *swipeGestureRight = [[UISwipeGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSwipeGestureRight:)];
swipeGesture.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:swipeGesture];
[swipeGesture release];

-(void)handleSwipeGestureLeft:(UISwipeGestureRecognizer *)sender
{
//code...
}

-(void)handleSwipeGestureRight:(UISwipeGestureRecognizer *)sender
{
//code...
}


화면 init 해줄 때 등록을 해놓고 callback 함수 설정만 해놓으면 방향에 따라 값이 문제없이 들어온다
(left, right, up, down)


제스쳐 시작여부와 터치 정보를 사용하고 싶다면 해당 delegate를 추가해서 사용하면 된다.
각각 제스쳐 마다 딜리게이트를 연결해 주어야 각각의 방향에 제어가 가능하다.

UIGestureRecognizerDelegate

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
 
//Tap 또한 제스쳐로 추가할 수 있다.


일단 prototype을 추가해주고

#define ZOOM_STEP 1.5


@interface RootViewController (UtilityMethods)

- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center;

@end



//초기화 해주는곳에서 객채 생성


UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];

[doubleTap setNumberOfTapsRequired:2];

[mapImgView addGestureRecognizer:doubleTap];

[doubleTap release];



//실행할 함수

- (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer 
{
    // double tap zooms in
    float newScale = [imageScrollView zoomScale] * ZOOM_STEP;

    CGRect zoomRect = 
[self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]];

    [imageScrollView zoomToRect:zoomRect animated:YES];
}

- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center 
{
    CGRect zoomRect;

    zoomRect.size.height = [imageScrollView frame].size.height / scale;
    zoomRect.size.width  = [imageScrollView frame].size.width  / scale;

    
    // choose an origin so as to get the right center.
    zoomRect.origin.x    = center.x - (zoomRect.size.width  / 2.0);
    zoomRect.origin.y    = center.y - (zoomRect.size.height / 2.0);

    return zoomRect;
}

반응형
댓글
반응형