我使用此方法在多个视图中设置手势识别器。
- (void) setupNavbarGestureRecognizer {
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(navDoubleTap)];
gestureRecognizer.numberOfTapsRequired = 2;
CGRect frame = CGRectMake(self.view.frame.size.width/4, 0, self.view.frame.size.width/2, 44);
UIView *navBarTapView = [[UIView alloc] initWithFrame:frame];
[self.navigationController.navigationBar addSubview:navBarTapView];
navBarTapView.backgroundColor = [UIColor clearColor];
[navBarTapView setUserInteractionEnabled:YES];
[navBarTapView addGestureRecognizer:gestureRecognizer];
_navbarGestureActive = YES;
}
我注意到当我转到另一个视图并在主视图中双击时,程序崩溃了。
所以我这样做了:
-(void)viewWillAppear:(BOOL)animated{
[self setupNavbarGestureRecognizer];
}
我注意到我不必在其他视图控制器中执行相同的操作,只能在主视图控制器中执行相同操作,并且只能在从另一个VC返回之后执行相同操作。
我担心每次加载视图和gestureRecognizer。很明显,旧版本仍处于活动状态,因为崩溃只是双击而且只有一个识别出来的gestureRecognizer。
在某种程度上,手势识别器和它的处理程序(navDoubleTap)之间存在脱节,并且没有使用任何代理。
我应该提到它在主VC中工作正常,直到我离开并回来。
更新:我遇到的问题是,每次“setupNavbarGestureRecognizer'被调用,它添加了一个新的视图和gestureRecognizer。这是在几个VC中完成的,而指针却迷失了。
我的解决方案是在进入和离开每个视图时删除视图和gestureRecognizers,然后在viewWillAppear中调用setupNavbarGestureRecognizer。
也许不是最好的方法,但它正在发挥作用。