編集:UIPageViewControllerの「データソース」である複数のViewControllerの上部に配置されたUIViewにこのメソッドがあります
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setBackgroundColor:[UIColor clearColor]];
UITapGestureRecognizer *tapGR =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTap:)];
[tapGR setDelegate:self];
[tapGR setNumberOfTapsRequired:1];
[self addGestureRecognizer:tapGR];
UITapGestureRecognizer *doubleTapGR = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleDoubleTap:)];
[doubleTapGR setNumberOfTapsRequired:2];
[self addGestureRecognizer:doubleTapGR];
[tapGR requireGestureRecognizerToFail :doubleTapGR];
[tapGR release];
[doubleTapGR release];
}
return self;
}
-(void)handleTap:(UITapGestureRecognizer *)tapRecognizer{
if (!(tapRecognizer.state == UIGestureRecognizerStatePossible)) {
[[NSNotificationCenter defaultCenter]postNotification:[NSNotification notificationWithName:kTapOnCenterNotificationName object:nil]];
}
}
-(void)handleDoubleTap:(UITapGestureRecognizer *)doubleTapRecognizer{
CGPoint point = [doubleTapRecognizer locationInView:self];
LSSharedVariables *sharedVariables = [LSSharedVariables sharedInstance];
[sharedVariables setDoubleTapPoint:point];
[[NSNotificationCenter defaultCenter]postNotification:[NSNotification notificationWithName:kLongPressNotificationName object:nil]];
}
ジェスチャレコグナイザーの状態がUIGestureRecognizerStateEndedと等しい場合にのみアクションを実行するように指定した場合でも、ログは複数回表示されます。このブロックでアクションを1回だけ実行したいのですが、どうすればよいですか?
編集:ダブルタップメソッドは、UIPageViewControllerのページの何倍も呼び出されることがわかりました。私が理解できないのは、なぜそれがsingleTapGestureRecognizerと同じではないのかということです。