UISwipeGestureRecognizer会干扰滑块

时间:2015-06-04 11:19:33

标签: ios objective-c uigesturerecognizer

我在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];
}

所以我的问题是,如何在图像视图中滑动时限制手势才能正常工作?

3 个答案:

答案 0 :(得分:2)

尝试将限制手势区域的代码放在gestureRecognizer:shouldReceiveTouch:中并返回NO,以防您不希望手势接收此触摸。它应该可以防止手势过度滑动。

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

有一种专用的方法可以检查点是否在视图中

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

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