当对象移动到某个帧时,如何停止UIPanGestureRecognizer

use*_*582 15 iphone objective-c ipad uigesturerecognizer 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];  

}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

jba*_*100 23

UIGestureRecognizers具有启用的属性.文档:

禁用手势识别器,使其不接收触摸.默认值为YES.如果在手势识别器当前正在识别手势时将此属性更改为"否",则手势识别器将转换为已取消状态.

编辑:

只需将enabled属性设置为NO即可.

gestureRecognizer.enabled = NO;
Run Code Online (Sandbox Code Playgroud)

  • 嗨jbat.你能给我一些线代码样本吗?用于停止UIGestureRecognizers (2认同)

der*_*iuk 13

当您需要阻止UIPanGestureRecognizer识别手势时,您只需将此代码行(如jbat100所述)放入-(void)move:(UIPanGestureRecognizer *)gestureRecognizer:

gestureRecognizer.enabled = NO;
Run Code Online (Sandbox Code Playgroud)

在此行之后,您的gestureRecognizer状态设置为 "UIGestureRecognizerStateCancelled"

然后只需在-(void)move:(UIPanGestureRecognizer *)gestureRecognizer函数中添加几行:

if ([gestureRecognizer state] == UIGestureRecognizerStateCancelled) {
     gestureRecognizer.enabled = YES;
}
Run Code Online (Sandbox Code Playgroud)

并且您将能够使用手势识别器

编辑:

这是代码片段:

- (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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个。它将识别器的状态封装在该函数中,而不是在您的代码中放置愚蠢的“shouldCancelPan”实例变量。 (2认同)

nov*_*ova 5

设置pangesture.delegate = self,并实现委托方法

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
     //return NO when you reach the frame
}
Run Code Online (Sandbox Code Playgroud)