繁体   English   中英

当手势已经处于活动状态时,如何启动手势识别器?

[英]How to initiate a gesture recognizer when a gesture is already active?

我有一个子视图A(self.thumbnailImageView)添加到我的超级视图中。 我已经将UILongPressGestureRecognizer和UISwipeGestureRecognizer添加到了子视图A。

[self addLongPressGestureRecognizerForPreviewCell:self.thumbnailImageView];

[self addSwipeUpGestureRecognizerForImageView:self.thumbnailImageView];

现在在处理程序方法中,当UILongPressGestureRecognizer状态开始时,我将一个Subview B(bigPreviewImage)添加到我的superview(self.view)中。

-(void)tapGesture:(UILongPressGestureRecognizer *)recognizer{

 if (recognizer.state == UIGestureRecognizerStateBegan)
 {
    // Long press detected, start the timer
    [self showPreviewImage:recognizer];
 }
 else if(recognizer.state == UIGestureRecognizerStateEnded)
 {
    [self hidePreviewImage];
 }
}

-(void)showPreviewImage:(UILongPressGestureRecognizer *)recognizer{

    UIImageView *bigPreviewImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Desktop"]];

    bigPreviewImage.frame = CGRectMake(self.thumbnailImageView.frame.origin.x - 50.0, self.thumbnailImageView.frame.origin.y + self.thumbnailImageView.frame.size.height + 10.0, 300.0, 250.0);
    bigPreviewImage.tag = 10000;//200.0 & 125.0
    [bigPreviewImage setUserInteractionEnabled:YES];

    [self.view addSubview:bigPreviewImage];
} 

现在,一旦UILongPressGestureRecognizer处于活动状态,并且用户仍然用手指按Subview A,如果用户向上滑动屏幕,我希望SwipeGestureRecognizer可以启动。 但是没有发生同样的事情。 当手势已经处于活动状态时,如何启动手势识别器?

我已经实现了shouldRecognizeSimultaneouslyWithGestureRecognizer方法,但是仍然没有调用向上滑动手势方法。 如果我想念什么,请告诉我。

得到它了!!!

我们不需要单独的滑动手势识别器。 长按手势识别器中的不同状态可用于处理这种情况。

长按手势具有不同的状态,例如UIGestureRecognizerStateBeganUIGestureRecognizerStateChangedUIGestureRecognizerStateEnded

  • 长按子视图时,将立即调用UIGestureRecognizerStateBegan

  • 用户尝试移动手指时,将调用UIGestureRecognizerStateChanged

  • 当用户从触摸点抬起手指时,将调用UIGestureRecognizerStateEnded


-(void)longPressGestureForPreviewImageView:(UILongPressGestureRecognizer *)recognizer{

    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        // Long press detected, start the timer
        [self showPreviewImage:recognizer];
    }
    else if(recognizer.state == UIGestureRecognizerStateChanged)
    {
        NSLog(@"Swipe up");

        if ([self.thumbnailImageView.gestureRecognizers containsObject:recognizer]) {
            [self.thumbnailImageView removeGestureRecognizer:recognizer];
        }
    }
    else if(recognizer.state == UIGestureRecognizerStateEnded)
    {
        [self hidePreviewImage];
    }

因此,我们可以使用“手势委托”方法与长按手势识别器一起处理滑动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM