10

UIPanGestureRecognizer를 사용하여 움직이는 이미지 형식의 개체가 있고 개체가 특정 프레임에 도달하면 UIPanGestureRecognizer를 인식하지 않아야합니다.개체가 특정 프레임으로 이동했을 때 UIPanGestureRecognizer를 중지하는 방법

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)]; 
    [panRecognizer setMinimumNumberOfTouches:1]; 
    [panRecognizer setMaximumNumberOfTouches:1]; 
    [panRecognizer setDelegate:self]; 
    [templatePhotoPlaceholderView addGestureRecognizer:panRecognizer]; 

-(void)move:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    CGPoint translatedPoint = [gestureRecognizer translationInView:templatePhotoPlaceholderView]; 

    if([gestureRecognizer state] == UIGestureRecognizerStateBegan) { 
     _firstX = [imageview center].x; 
     _firstY = [imageview center].y; 
    } 



    translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y); 
    //NSLog(@" Move center point :%@", NSStringFromCGPoint(translatedPoint)); 

    [imageview setCenter:translatedPoint]; 

} 

어떻게 이런 짓을 할 수있다?

답변

21

UIGestureRecognizers이 활성화 된 속성이 있습니다. 설명서 :

제스처 인식기를 비활성화하여 접촉을받지 못하게합니다. 기본값은 YES입니다. 제스처 인식기가 현재 제스처, 취소 된 상태로 동작 인식 전환을 인식하는 동안 당신은 NO이 속성을 변경하는 경우.

편집 :

그냥 NO로 사용할 속성을 설정합니다. 당신은 제스처를 인식에서 UIPanGestureRecognizer을 중지해야하는 경우 (jbat100 말했듯이)

gestureRecognizer.enabled = NO; 
+2

안녕 jbat. 당신은 저에게 라인 코드 샘플을 줄 수 있습니까? UIGestureRecognizers 멈추기 – user905582

8

, 당신은 단지 -(void)move:(UIPanGestureRecognizer *)gestureRecognizer이 코드 라인을 넣어 :

gestureRecognizer.enabled = NO; 

당신의 gestureRecognizer 상태가 "UIGestureRecognizerStateCancelled"

로 설정이 줄 끝에서

다음은 -(void)move:(UIPanGestureRecognizer *)gestureRecognizer 함수에 몇 줄을 추가하면됩니다.

if ([gestureRecognizer state] == UIGestureRecognizerStateCancelled) { 
    gestureRecognizer.enabled = YES; 
} 

당신은 당신의 제스처 인식기

편집 작업을 할 수 있습니다 :

여기에 코드의 다음 pangesture.delegate = 자기를 설정

- (void)move:(UIPanGestureRecognizer *)gestureRecognizer { 
    BOOL cancelPanGesture = YES; 
    if (cancelPanGesture) { 
     /* 
     After this line gesture recognizer will be disabled, state will be UIGestureRecognizerStateCancelled 
     and this method (move:) will fire one more time. 
     */ 
     gestureRecognizer.enabled = NO; 
    } 
    if (gestureRecognizer.state == UIGestureRecognizerStateCancelled) { 
     gestureRecognizer.enabled = YES; 
    } 
} 
+1

정확하게'gestureRecognizer.enabled = YES; '가 쓰여지는 곳에서 답을 찾지 못했습니다. 네가 정교 할 수 있다면 훨씬 더 의미가있을거야. –

+0

@ rohan-patel 의견을 주셔서 감사합니다. 답변을 업데이트했습니다. – derpoliuk

+1

나는 이것을 좋아한다. 코드에서 어리석은'shouldCancelPan' 인스턴스 변수를 넣는 대신에 그 함수에 캡슐화 된 인식기의 상태를 유지합니다. –

3

, 위임 메소드를 구현

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    //return NO when you reach the frame 
}