LongPressGestureRecognizer 从视图背后识别
LongPressGestureRecognizer recognize from behind the views
我已将 MainViewController 和 LongPressGestureRecognizer 添加到 MainViewController 的视图中。
当我通过如下所示添加为 MainViewController 的子视图控制器来调用我的 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。
您的操作被多次调用。每当
- 手势被识别(按下特定时间)
- 手势结束(抬起)
- 手势检测到变化(手指移动)
并且每次添加一个视图。
因此,当您触地时,您会添加一个视图,而当您抬起时,您会再次添加一个视图。除了你的手势识别器 不会取消 触摸跟踪只是因为你在触摸位置上方添加了一个视图。它仍然处理触摸。为防止这种情况,只需考虑您的手势状态如下
- (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....];
}
}
我已将 MainViewController 和 LongPressGestureRecognizer 添加到 MainViewController 的视图中。
当我通过如下所示添加为 MainViewController 的子视图控制器来调用我的 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。
您的操作被多次调用。每当
- 手势被识别(按下特定时间)
- 手势结束(抬起)
- 手势检测到变化(手指移动)
并且每次添加一个视图。
因此,当您触地时,您会添加一个视图,而当您抬起时,您会再次添加一个视图。除了你的手势识别器 不会取消 触摸跟踪只是因为你在触摸位置上方添加了一个视图。它仍然处理触摸。为防止这种情况,只需考虑您的手势状态如下
- (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....];
}
}