【问题标题】:Forward swipe gesture from UIView to UIScrollView从 UIView 向前滑动手势到 UIScrollView
【发布时间】:2017-02-28 15:23:54
【问题描述】:

我的应用程序中的主要UIView 包含一个UIScrollView。我在主视图中添加了UISwipeGestureRecognizer:

@IBOutlet weak internal var scrollView: UIScrollView!

override func viewDidLoad() {
    super.viewDidLoad()

    swipeRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipes(sender:)))
    view.addGestureRecognizer(swipeRecognizer)
  }

我已经像这样删除了识别器方法......但我不知道如何将客人传递给滚动视图。

  func handleSwipes(sender: UISwipeGestureRecognizer) {
    if sender.direction == .left {
      // Send left swipe to the UIScrollView
    } else if (sender.direction == .right) {
      // Send right swipe to the UIScrollView
    }
  }

【问题讨论】:

    标签: ios uiscrollview uiswipegesturerecognizer


    【解决方案1】:

    你需要的是:

    1. 通过响应链传播触摸的直通视图
    2. 在UIScrollView上模拟滑动手势

    直通视图

    您可以继承 scrollView 并覆盖 pointInside:event: 方法

    // you should convert this into Swift :(
    -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
         for (UIView *view in self.subviews) {
             if (!view.hidden && view.userInteractionEnabled && 
                 [view pointInside:[self convertPoint:point toView:view] withEvent:event])
                 return YES;
        }
        return NO;
     }
    

    然后您的自定义scrollView 会将自己的手势传播到其下方的其他视图,您可以在mainView 中收听滑动手势

    在UIScrollView 上模拟滑动手势

    您可以通过UIScrollView 的setContentOffset 方法做到这一点。如果您将内容偏移设置为超出其范围,这可能会让人感到错误,请注意这一点!

    但是,恕我直言,最好的解决方案是您更改视图层次结构并聆听滚动视图顶部视图上的滑动手势。

    【讨论】:

    • 您可以使用setContentOffset 的handleSwipes 函数模拟滚动视图中的滑动。你不能在两个不同的视图上自动使用相同的手势,这违背了响应者链的想法。
    • 这不是你在做什么。您正在另一个视图后面的视图上聆听手势,这就是为什么您需要将 ScrollView 子类化
    • 好的,我明白了。我首先这样做的原因是用户可以在滚动视图上向左或向右滑动,而无需我做任何事情。因为滚动视图不占用屏幕的整个宽度,所以我想检测主视图上的滑动并将它们传递给滚动视图。在handleSwipes 中修改setContentOffset 似乎是最好的解决方案。我想我只是期望将手势从一个视图转发到另一个视图会很容易。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2012-02-17
    • 2015-08-16
    • 2014-10-24
    • 1970-01-01
    • 2017-07-14
    • 2016-05-15
    相关资源
    最近更新 更多