iphone - 手势问题: UISwipeGestureRecognizer + UISlider

标签 iphone event-handling uislider uigesturerecognizer gesture-recognition

遇到与手势相关的问题。我实现了 UISwipeGestureRecognizer 来获取向左和向右滑动事件,并且工作正常。然而,我面临的问题是,我在同一 View 中的 UISlider 玩得不好。 slider 的滑动 Action 被误认为是向左/向右滑动。

有人以前遇到过这个问题,有什么解决办法吗?

非常感谢。

这是 View Controller 中包含的代码:

 - (void)viewDidLoad {

            [super viewDidLoad];

                //Setup handling of LEFT and RIGHT swipes
             UISwipeGestureRecognizer *recognizer;

                recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
                [recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
                [[self view] addGestureRecognizer:recognizer];
                [recognizer release];

                recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
                [recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)];
                [[self view] addGestureRecognizer:recognizer];
                [recognizer release];
        }

    -(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {

      if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {
       NSLog(@"Swipe Right");
       //Do stuff
      }

      if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
       NSLog(@"Swipe Left");
       //Do stuff
      }
    }

最佳答案

处理此问题的最简单方法可能是防止手势识别器看到 slider 上的触摸。您可以通过将自己设置为委托(delegate)人,然后实现来做到这一点

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view isKindOfClass:[UISlider class]]) {
        // prevent recognizing touches on the slider
        return NO;
    }
    return YES;
}

如果这不起作用,则 slider 实际上可能有接收触摸的 subview ,因此您可以沿着superview链向上走,沿途测试每个 View 。

关于iphone - 手势问题: UISwipeGestureRecognizer + UISlider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4765661/

相关文章:

ios - 如何使用 UIBezierPath 更改元素的颜色?

iphone - 自动显示 MKAnnotation 标注

java - Gxt树网格双击显示弹出窗口

ios - Swift UISlider 最大值

ios - 如何以编程方式将 UISegmentedControl 添加到容器 View

iphone - 允许通用 iOS 版本在 iPad 1 上运行,但不能在 iPod touch 3G 上运行

c# - C# 事件处理程序在内部是如何工作的?

java - 所有按钮生成相同的事件,生成相同的输出

ios - 如何在 IOS 的 UI slider 中添加不同的颜色?

ios - UISlider 无法在 UITableViewCell 内工作