【问题标题】:Using UISwipeGestureRecognizer in UIScrollView, can't detect right swipe, only detect left swipe在 UIScrollView 中使用 UISwipeGestureRecognizer,无法检测到右滑动,只检测左滑动
【发布时间】:2012-08-29 03:47:32
【问题描述】:

我在 UIScrollView 中有一个 UIView demoView。我想垂直滚动 UIScroll 视图而不是水平滚动。我将 UISwipeGestureRecognizer 添加到 UIView。代码是(这里的self是UIScrollView):

self.demoView.userInteractionEnabled = YES;
UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc] 
    initWithTarget:self action:@selector(rightSwipeLineChart:)];
rightSwipe.direction = UISwipeGestureRecognizerDirectionRight;
[self.demoView addGestureRecognizer:rightSwipe];

UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc] 
    initWithTarget:self action:@selector(leftSwipeLineChart:)];
[self.demoView addGestureRecognizer:leftSwipe];

结果是我只能检测到左滑动手势,无法检测到右滑动手势。我的代码有什么问题?谢谢。

【问题讨论】:

  • 也许self这里是视图控制器?
  • self 这里是 UIScrollView 的子类。我使用 .xib 文件。这个子类与 .xib 捆绑在一起。
  • 为什么要添加滑动识别器?如果您不希望滚动视图水平滚动,您应该指定 contentSize 为 0 宽度(或小于视口宽度)。

标签: objective-c uiscrollview uiswipegesturerecognizer


【解决方案1】:

UISwipeGestureRecognizer 方向属性的默认值是 UISwipeGestureRecognizerDirectionRight,因此您正在创建两个执行相同操作的识别器。

这就是我解决问题的方法:

for (int i = 0; i < 2; i++) {
    UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onGestureSwipe:)];
    swipeRecognizer.direction = (i == 0 ? UISwipeGestureRecognizerDirectionRight : UISwipeGestureRecognizerDirectionLeft);
    [self.tableView addGestureRecognizer:swipeRecognizer];
}

【讨论】:

    【解决方案2】:

    要检测到 UIScrollView 或 UIWebView 的滑动很难。您可以从这里使用“Swipe4ScrollViews”: UISwipeGestureRecognizer not working

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 2015-01-17
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 2019-12-22
      • 2018-04-04
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多