2015-04-16 48 views
0

我将MainViewController和LongPressGestureRecognizer添加到MainViewController的视图中。LongPressGestureRecognizer从视图后面识别

当我通过添加下面的MainViewController的子视图控制器作为longpress手势操作来调用我的CategoryViewController时。

- (IBAction)longPressClicked:(id)sender { 
    _categoryVC = [[CategoryViewController alloc] initWithNibName:@"CategoryViewController" bundle:nil]; 
    _categoryVC.view.frame = self.view.frame; 
    [self addChildViewController:_categoryVC]; 
    [_categoryVC didMoveToParentViewController:self]; 

} 

我攻长按第一次筛选它加载CategoryViewController儿童控制器和推顶部这是很好的,但我又在做同样的事情,longPressClicked方法再次调用。

我不知道为什么它会这样做,因为视图顶部的CategoryViewController和它具有UserInteractionEnabled。

回答

1

您的操作被多次调用。每次当

  • 手势被认可(触落的具体时间)
  • 手势已经结束(抬起)
  • 手势时检测到变化(手指移动)

并且每次添加视图。

所以,当你触摸下来,你添加一个视图,当你抬起你再次添加一个视图。除了您的手势识别器,不会取消触摸跟踪,只是因为您在触摸位置上方添加了视图。它仍然处理触动。为了防止这种只考虑您的操作的状态如下

- (IBAction)longPressClicked:(id)sender { 
    UILongPressGestureRecognizer *gesture = (UILongPressGestureRecognizer *)sender; 

    if (gesture.state == UIGestureRecognizerStateBegan) { 
     // add your view 
    } 
} 

另一种选择是,让您的视图的弱引用,并检查您的看法是零。如果是这样,创建一个新的视图,并将其添加到您的视图控制器的子视图。

@interface ViewController() 
@property (weak, nonatomic) UIView *myView; 
@end 

- (void)longPressClicked:(id)sender { 
    if (!self.myView) { 
     // create view 
     self.myView = [[UIView alloc] init....]; 
    } 
}