gpt4 book ai didi

ios - 将 UIPanGestureRecognizer 和 UISwipeGestureRecognizer 添加到同一 View 会导致在设置 requireGestureToFail 后发生冲突

转载 作者:可可西里 更新时间:2023-11-01 04:21:07 27 4
gpt4 key购买 nike

我在同一个 View 中添加了一个滑动手势识别器和一个平移手势识别器。这些手势应该相互排斥。

为了做到这一点,我添加了对滑动手势的约束

[swipeGesture requireGestureToFail:panGesture];

(因为平移手势应该优先)

问题是平移手势总是被调用 - 即使是在非常快速的滑动过程中也是如此。

为了克服这个问题,我将自己设为平移手势的代表。在委托(delegate)方法中我设置了一些代码如下:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// check if it is the relevant view
if (gestureRecognizer.view == self.myViewWithTwoGestures)
{
// check that it is the pan gesture
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
{
UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)gestureRecognizer;
CGPoint velocity = [pan velocityInView:gestureRecognizer.view];
// added an arbitrary velocity for failure
if (ABS(velocity.y) > 100)
{
// fail if the swipe was fast enough - this should allow the swipe gesture to be invoked
return NO;
}
}
}
return YES;
}

是否有建议的速度来确保良好的行为?还有其他方法可以强制平移手势失败吗?

最佳答案

根据 Apple 文档 here (在 为两个手势识别器声明特定顺序 下)让 UIPanGestureRecognizerUISwipeGestureRecognizer 在同一个 View 上工作的方法是要求UISwipeGesureRecognizer 在调用 UIPanGestureRecognizer 之前失败(与您编写的相反)。这可能与滑动手势也是平移手势这一事实有关,但反之不一定正确(请参阅此 SO 问题)。

我写了这段代码,它成功地识别了平移和滑动手势:

UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panned:)];
UISwipeGestureRecognizer * swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swiped:)];
[pan requireGestureRecognizerToFail:swipe];
swipe.direction = (UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight);

-(void)panned:(UIPanGestureRecognizer *)gesture
{
NSLog(@"Pan");
}

-(void)swiped:(UISwipeGestureRecognizer *)gesture
{
NSLog(@"Swipe");
}

这并不像您希望的那样有效(因为您需要滑动手势失败,所以在平移手势开始之前会有一小段延迟)但它确实有效。但是,您发布的代码使您能够根据自己的喜好微调手势。

关于ios - 将 UIPanGestureRecognizer 和 UISwipeGestureRecognizer 添加到同一 View 会导致在设置 requireGestureToFail 后发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21723932/

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