澄清:
我想要实现的是:滑动手势(向上、向下、向右和向左)在 WebView 上。当任何手势发生时,这就是它需要发生的事情:一旦开始滑动,就必须开始一个动作(该动作实际上是加载一个 html 链接,该链接将 ip 摄像头移动到上、下、右、左)。html链接使相机一直向右或向左或向上或向下。我有另一个 html 链接,加载时会告诉网络摄像机停止。
所以它需要发生的是当状态是 UIGestureRecognizerStateBegan 链接加载并不断移动相机直到用户没有触摸屏幕并且状态变为 UIGestureRecognizerStateEnded 并触发另一个 html 链接在 WebView 中运行哪个链接将停止相机从移动。正如我们所说,我发布的初始代码就是这样做的,但是刷卡太敏感了。您的代码已解决此问题,但现在第二个链接在第一个链接之后立即加载,不允许相机移动。是否有意义??第一个链接需要运行直到手指被抬起。
原始问题:
我试图使用我管理的 UIPanGestureRecognizer 中的速度来确定滑动方向,它检测到向右、向左、向上和向下滑动,它会根据滑动方向触发适当的操作,并在每次滑动时再次触发正确的操作 UIGestureRecognizerStateEnded ,但是,我在下面的代码中的问题是方向非常敏感,例如在向右滑动期间,它可以识别大部分向右滑动,但也可以在两者之间向上或向下滑动。由于滑动并不总是完美地在一条直线上,我想发现的是,如果滑动大部分是向右,则只触发向右滑动的动作,并忽略微小的像素偏差。
此外,对于我的项目来说,理想情况下是只触发一次给定滑动方向上的动作,就像在 UISwipeGestureRecognizer 中一样,但是使用它我遇到了 UIGestureRecognizerStateEnded 的问题,因为它不会让滑动动作运行,直到我将手指从屏幕,即使我的手指仍在滑动,它也会立即完成滑动动作。
任何帮助将非常感激。这是我的代码:
在 ViewDidLoad 我有:
UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[_myWebView addGestureRecognizer:gestureRecognizer];
[gestureRecognizer setMinimumNumberOfTouches:1];
[gestureRecognizer setMaximumNumberOfTouches:1];
在我的课堂上,我有:
- (void)handleGesture:(UIPanGestureRecognizer *)gestureRecognizer
{
CGPoint velocity = [gestureRecognizer velocityInView:_myWebView];
if(velocity.x > 0)//right
{
//my action here
if ( [gestureRecognizer state] == UIGestureRecognizerStateEnded )
{ //my action when swipe finished here }
}
else if(velocity.x < 0)//left
{
//my action here
if ( [gestureRecognizer state] == UIGestureRecognizerStateEnded )
{ //my action when swipe finished here }
}
else if(velocity.y > 0)//down
{
//my action here
if ( [gestureRecognizer state] == UIGestureRecognizerStateEnded )
{ //my action when swipe finished here }
}
else if(velocity.y < 0)//up
{
//my action here
if ( [gestureRecognizer state] == UIGestureRecognizerStateEnded )
{ //my action when swipe finished here }
}
谢谢,有什么需要说明的请追问。