我在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];
}
所以我的问题是,如何在图像视图中滑动时限制手势才能正常工作?
答案 0 :(得分:2)
尝试将限制手势区域的代码放在gestureRecognizer:shouldReceiveTouch:
中并返回NO
,以防您不希望手势接收此触摸。它应该可以防止手势过度滑动。
答案 1 :(得分:1)
如果您只对图片视图中的滑动感兴趣,则应将滑动手势识别器添加到图像视图,而不是将其添加到整个视图中。那你就不需要任何特殊的逻辑了。
答案 2 :(得分:-1)
有一种专用的方法可以检查点是否在视图中
BOOL isPointInsideView = [_artworkImageViewpointInside:tapPoint withEvent:nil];
但我认为发生的事情是,如果你看看tapPoint,它实际上在你的imageView之外 如果你的滑块非常接近imageView,那么滑块会捕捉到移动,你应该做的是检查滑块是否适用于滑块并在需要时传播到imageView 或者继承UISlider并减少其响应rect