以下のコードでは、単純な情報ボタンでユーザーの 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];
}