10

Tôi có một đối tượng kiểu hình ảnh mà tôi đang chuyển bằng UIPanGestureRecognizer và tôi cần dừng nhận dạng UIPanGestureRecognizer khi đối tượng đạt đến một khung nhất định.Làm thế nào để dừng UIPanGestureRecognizer khi đối tượng di chuyển đến khung nhất định

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]; 

} 

Tôi làm như thế nào?

Trả lời

21

UIGestureBộ nhận dạng có thuộc tính được bật. Tài liệu:

Tắt trình nhận dạng cử chỉ để nó không nhận được chạm. Giá trị mặc định là CÓ. Nếu bạn thay đổi thuộc tính này thành NO trong khi Trình nhận dạng cử chỉ hiện đang nhận dạng cử chỉ, cử chỉ sẽ chuyển sang trạng thái bị hủy.

EDIT:

Chỉ cần thiết lập thuộc tính kích hoạt để NO.

gestureRecognizer.enabled = NO; 
+2

Xin chào jbat. Bạn có thể cho tôi một số mẫu mã cho điều đó không. để dừng các UIGestureRecognizers – user905582

8

Khi bạn cần phải dừng lại UIPanGestureRecognizer của bạn từ công nhận cử chỉ, bạn chỉ cần đặt dòng mã này (như jbat100 nói) trong -(void)move:(UIPanGestureRecognizer *)gestureRecognizer:

gestureRecognizer.enabled = NO; 

sau dòng này nhà nước gestureRecognizer bạn thiết lập như "UIGestureRecognizerStateCancelled"

sau đó chỉ cần thêm vài dòng vào hàm -(void)move:(UIPanGestureRecognizer *)gestureRecognizer của bạn:

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

và bạn sẽ có thể làm việc với cử chỉ nhận dạng của bạn

EDIT:

Dưới đây là đoạn mã:

- (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

Trả lời không có nghĩa là chính xác 'gestureRecognizer.enabled = YES;' nên được viết. Nếu bạn có thể xây dựng sẽ có ý nghĩa hơn nhiều. –

+0

@ rohan-patel Cảm ơn bạn đã bình luận, tôi đã cập nhật câu trả lời của tôi. – derpoliuk

+1

Tôi thích điều này. Nó giữ trạng thái của trình nhận dạng được gói gọn trong hàm đó thay vì đặt các biến cá thể 'shouldCancelPan' ngu ngốc trong mã của bạn. –

3

Đặt pangesture.delegate = tự, và thực hiện các phương pháp đại biểu

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    //return NO when you reach the frame 
} 
Các vấn đề liên quan