检测到LongPressGesture已在另一个视图控制器中结束

时间:2014-11-20 20:43:26

标签: ios objective-c uigesturerecognizer

我有一个LongPressGesture识别器,当检测到长按时,它会显示一个新的信号:

if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {

            [self performSegueWithIdentifier:@"showImage" sender:self];
}

问题是我想要新的' segue'检测到手势已经结束并恢复到之前的视图控制器:

if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {

   [self presentViewController:friendViewController animated:YES completion:Nil];
}

我尝试在新的segue中设置新的手势识别器,但除非用户结束之前的手势,否则无法检测到它。

1 个答案:

答案 0 :(得分:2)

你正在(或试图做)不正确的事情。当您转向新控制器时,长按识别器的状态将变为“失败”,因此您无法再使用它。没有办法将手势识别器添加到新控制器的视图中,该视图将接受您之前的触摸作为其触摸的开始,因此不会起作用。此外,如果你想回到以前的控制器,你不应该使用presentViewController,它只是创建一个新的friendViewController实例;它不会回到原来的那个。

我认为您实现目标所需的方式不是提供新的控制器,而是在手势识别器的基础上添加新视图。在下面的示例中,我只是为了演示目的创建一个简单的视图,但如果您需要更复杂的东西,可以在xib中创建一个。

-(IBAction)handleLongPress:(UILongPressGestureRecognizer *)sender {

    if (sender.state == UIGestureRecognizerStateBegan) {
        UIView *newView = [[UIView alloc] initWithFrame:self.view.bounds];
        newView.backgroundColor = [UIColor redColor];
        newView.tag = 10;
        [self.view addSubview:newView];
    }

    if (sender.state == UIGestureRecognizerStateEnded) {
        [[self.view viewWithTag:10] removeFromSuperview];
    }
}