1

在下面的代码中,由于用户 touchUpInside 在一个简单的信息按钮上,我弹出了一个 ImageView。视图上还有其他按钮。

为了消除信息,我在控制器视图中添加了一个 UITapGestureRecognizer,并在检测到点击时隐藏视图。

如果我不删除 tapGestureRecognizer,则每次都会调用该操作。

即使我确实删除了手势操作,一旦添加了此手势识别器,按钮也不会收到 touchUpInside 事件。为什么?

我的 MainViewController 中的代码

- (void) dismissInfo: (UITapGestureRecognizer *)gesture {
    [kInfoView setHidden: YES];
    [gesture removeTarget: self action: NULL];
}

- (IBAction) displayInfo {      
    CGRect startFrame = CGRectMake(725, 25, 0, 0), origFrame;
    CGFloat yCenter = [kInfoView frame].size.height/2 + 200;
    CGPoint startCenter = CGPointMake(724, 25), displayCenter = CGPointMake(384, yCenter);
    UITapGestureRecognizer *g = [[UITapGestureRecognizer alloc] initWithTarget: self
                                                                        action: @selector(dismissInfo:)];

    [self.view addGestureRecognizer: g];
    origFrame = [kInfoView frame];
    [kInfoView setCenter: startCenter];
    [kInfoView setHidden: NO];
    [kInfoView setFrame: startFrame];

    [UIView beginAnimations: @"info" context: nil];
    [UIView setAnimationDuration: .5];
    [UIView setAnimationDelegate: self];

    [kInfoView setFrame: origFrame];
    [kInfoView setCenter: displayCenter];

    [UIView commitAnimations];
}
4

2 回答 2

1

我可以想象一种可能的解决方案:您可以将其从超级视图中删除(并在需要时再次添加),
而不是隐藏视图。我认为在这种情况下,GestureRecognizer 不再处于活动状态。

于 2010-07-21T10:34:25.830 回答
0

您删除手势识别器的方式会从您的班级中删除所有手势识别器。不仅是您设置的那些,还有在“超级”中设置的那些。

这就是以这种方式移除手势识别器后没有收到 touchUpInside 事件的原因。

从您写的内容来看,我认为可能有比使用 UITapGestureRecognizer 更简单的方法,但是如果没有更多关于您要完成的工作的信息,我无法确定。

于 2011-09-13T12:41:00.013 回答