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
中,以防您不希望手势接收此触摸。它应该可以防止手势超过滑块交互。
我在 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
中,以防您不希望手势接收此触摸。它应该可以防止手势超过滑块交互。