UISwipeGestureRecognizer 干扰滑块

UISwipeGestureRecognizer interferes with slider

我在 iOS 应用程序 (Obj-C) 中有一个视图,它的中央有一个图像视图,紧靠其下方的是一个滑块。 图像视图显示专辑封面,滑块可用于调整正在播放的曲目位置。

还有一对左右滑动手势识别器。这些用于跳到下一首或上一首曲目。

问题是滑动手势识别器似乎会覆盖用户移动滑块拇指。 在我的手势识别器代码中,我检查触摸点是否在图像视图内,但它仍然阻止滑块移动。 (拇指会移动,但当您移开手指时会跳回到原来的位置)。

这是我用来拒绝不在图像视图内的手势的代码。

- (IBAction)swipeLeftGestureAction:(UISwipeGestureRecognizer *)sender {
    // Get the location of the gesture.
    CGPoint tapPoint = [sender locationInView:_artworkImageView];

    // Make sure tap was INSIDE the artwork image frame.
    if( (tapPoint.x <0)
       || (tapPoint.y < 0 )
       || (tapPoint.x > _artworkImageView.frame.size.width)
       || (tapPoint.y>_artworkImageView.frame.size.height))
    {
        NSLog(@"Outside!");
        return;
    }
    NSLog(@"Swipe LEFT");
    [_mediaController skipNext];
}

所以我的问题是,如何限制手势仅在滑过图像视图时起作用?

有一个专门的方法来检查一个点是否在视图内

BOOL isPointInsideView = [_artworkImageViewpointInside:tapPoint  withEvent:nil];

但我认为正在发生的事情是,如果您查看 tapPoint,它实际上在您的 imageView 之外 如果你的滑块真的靠近 imageView 所以滑块捕捉到运动,你应该做的是检查滑块是否适用于滑块并在需要时传播到 imageView 或者继承 UISlider 并减少其响应 rect

如果您只对图像视图内的滑动感兴趣,那么您应该将滑动手势识别器添加到图像视图,而不是将其添加到整个视图.那么你就不需要任何特殊的逻辑了。

尝试将限制手势区域的代码放在 gestureRecognizer:shouldReceiveTouch: 和 return NO 中,以防您不希望手势接收此触摸。它应该可以防止手势超过滑块交互。