16

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

}

どうすればいいですか?

4

3 に答える 3

23

UIGestureRecognizersには有効なプロパティがあります。ドキュメンテーション:

ジェスチャ認識機能を無効にして、タッチを受け取らないようにします。デフォルト値はYESです。ジェスチャレコグナイザが現在ジェスチャを認識しているときにこのプロパティをNOに変更すると、ジェスチャレコグナイザはキャンセル状態に移行します。

編集:

enabledプロパティをNOに設定するだけです。

gestureRecognizer.enabled = NO;
于 2011-11-10T11:43:43.117 に答える
15

When you need to stop your UIPanGestureRecognizer from recognizing gesture, you just put this code line (as jbat100 said) in -(void)move:(UIPanGestureRecognizer *)gestureRecognizer:

gestureRecognizer.enabled = NO;

after this line your gestureRecognizer state set as "UIGestureRecognizerStateCancelled"

then just add couple lines to your -(void)move:(UIPanGestureRecognizer *)gestureRecognizer function:

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

and you'll be able to work with your gesture recognizer

EDIT:

Here's code snippet:

- (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;
    }
}
于 2012-10-31T13:11:38.127 に答える
5

pangesture.delegate=self を設定し、delegate メソッドを実装する

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
     //return NO when you reach the frame
}
于 2012-10-31T15:41:43.447 に答える