1

以下のコードでは、単純な情報ボタンでユーザーの touchUpInside の結果として ImageView をポップアップしています。ビューには他のボタンがあります。

情報を消すために、コントローラ ビューに UITapGestureRecognizer を追加し、タップが検出されたときにビューを非表示にしました。

tapGestureRecognizer を削除しないと、毎回アクションが呼び出されます。

ジェスチャ アクションを削除しても、このジェスチャ レコグナイザが追加されると、botton は 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

考えられる解決策の1つをイメージできます。ビュー
を非表示にする 代わりに、スーパービューから削除できます(必要に応じて再度追加できます)。この場合、GestureRecognizerはもうアクティブではないと思います。

于 2010-07-21T10:34:25.830 に答える
0

ジェスチャ レコグナイザを削除すると、クラスからすべてのジェスチャ レコグナイザが削除されます。あなたが設定したものだけでなく、「スーパー」で設定したもの。

これが、この方法でジェスチャ認識エンジンを削除した後に touchUpInside イベントが発生しない理由です。

あなたが書いたことから、UITapGestureRecognizer を使用するよりも簡単な方法があると思いますが、達成しようとしていることについてもう少し情報がないと確信が持てません。

于 2011-09-13T12:41:00.013 に答える