How to stop UIPanGestureRecognizer when object moved to certain frame

后端 未结 3 2111
逝去的感伤
逝去的感伤 2021-02-07 09:21

I have an object of image type which I am moving using UIPanGestureRecognizer, and I need to stop recognizing the UIPanGestureRecognizer when the object reaches a certain frame.

相关标签:
3条回答
  • 2021-02-07 09:48

    UIGestureRecognizers have an enabled property. Documentation:

    Disables a gesture recognizers so it does not receive touches. The default value is YES. If you change this property to NO while a gesture recognizer is currently recognizing a gesture, the gesture recognizer transitions to a cancelled state.

    EDIT:

    Just set the enabled property to NO.

    gestureRecognizer.enabled = NO;
    
    0 讨论(0)
  • 2021-02-07 09:52

    Set the pangesture.delegate=self, and implement delegate method

    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
    {
         //return NO when you reach the frame
    }
    
    0 讨论(0)
  • 2021-02-07 10:04

    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;
        }
    }
    
    0 讨论(0)
提交回复
热议问题