gpt4 book ai didi

ios - UILongPressGestureRecognizer 是如何工作的

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:28:15 28 4
gpt4 key购买 nike

我正在尝试了解手势识别器的工作原理,并尝试让手势识别器告诉我长触摸何时开始以及何时结束,即使触摸没有移动也是如此。

viewDidLoad 中,我添加了一个名为 game 的 subview 。在游戏中,我实现了两种识别触摸的方法。一个工作但不做我想做的事。另一个不起作用。

Method1 我刚刚添加了两个方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Began");
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *) event {
NSLog(@"Ended");
}

这有效,无需实例化手势识别器。谁能告诉我为什么?

问题是 - (void)touchedEnded: 只有在触摸移动时才会被调用,如果触摸在开始的相同位置结束则不会。所以如果我触摸并移动然后放手,两个函数都会被调用。如果我触摸并按住并放开(没有移动),只有 - (void)touchesBegan 被调用。

方法二我实例化了一个手势识别器:

@property (nonatomic, strong) UILongPressGestureRecognizer *lprg;

然后在我的设置中:

self.lprg = [UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];

然后:

- (void)handleLongPress:(UILongPressGestureRecognizer *)recognizer {
NSLog(@"Handling");
switch (recognizer.state) {
case UIGestureRecognizerStateBegan:
// ...
}
}

但是这个,我以编程方式实例化识别器的地方,没有工作。我从未在控制台中得到任何 NSLog 输出。

最佳答案

UIResponder(UIView 是)的所有子类都会响应 touchesBegan,这就是为什么您无需执行任何操作并且免费获得它的原因。然而,它远非手势识别器。在高层次上,手势识别器跟踪很多东西,例如状态。当然,您可以使用 touches begin,但想象一下,将其扩展到拾取诸如三指长按、滑动或捏合之类的东西。事情很快变得丑陋。安装手势识别器可以简化事情。

例如长按:

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] init];
longPress.numberOfTouchesRequired = 3;
[longPress addTarget:self action:@selector(longPressDetected:)];
[self.view addGestureRecognizer:longPress];

编辑

实现委托(delegate):

在您的实现文件 (.m) 中,在 @implemation 行的末尾添加该行。它应该看起来像

 @implementation ViewController <UIGestureRecognizerDelegate>

然后在你分配并初始化你的手势识别器之后设置委托(delegate)如下

 longPress.delegate = self;

然后根据需要从https://developer.apple.com/library/ios/documentation/uikit/reference/UILongPressGestureRecognizer_Class/Reference/Reference.html 中实现尽可能多的方法.例如,您可能会考虑这两个

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
return YES;
}

关于ios - UILongPressGestureRecognizer 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23486108/

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