gpt4 book ai didi

ios - LongPressGestureRecognizer 从 View 背后识别

转载 作者:行者123 更新时间:2023-11-29 02:07:01 35 4
gpt4 key购买 nike

我将 MainViewController 和 LongPressGestureRecognizer 添加到 MainViewController 的 View 中。

当我通过如下所示添加为 MainViewController 的 subview Controller 来调用我的 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 加载到子 Controller 并推到顶部,这很好,但我再次做同样的事情并且 longPressClicked 方法再次调用。

我想知道为什么它会这样做,因为 CategoryViewController 在 View 的顶部并且它启用了 UserInteractionEnabled。

最佳答案

您的操作被多次调用。每时每刻

  • 手势被识别(触摸特定时间)
  • 手势结束(抬起)
  • 手势检测到变化(手指移动)

每次添加 View 时。

因此,当您触地时,您会添加一个 View ,而当您抬起时,您会再次添加一个 View 。除了你的手势识别器不会取消触摸跟踪只是因为你在触摸位置上方添加了一个 View 。它仍然处理触摸。为防止这种情况,只需考虑如下手势状态

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

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

另一种选择是保持对 View 的弱引用并检查 View 是否为零。如果是这样,请创建一个新 View 并将其添加到您的 View Controller 的 subview 中。

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

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

关于ios - LongPressGestureRecognizer 从 View 背后识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29678999/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com