从UIView向UIScrollView转发滑动手势

时间:2017-02-28 15:23:55

标签: ios uiscrollview uiswipegesturerecognizer

我的应用中的主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)
  }

我已经删除了识别器方法,但是我不知道如何将guest虚拟机传递给scrollview。

  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
    }
  }

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要的是:

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

    Passthrough视图

    您可以继承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

    上模拟滑动手势

    您可以通过setContentOffset的{​​{1}}方法执行此操作。如果你将内容偏移设置在其范围之外,那可能会感到错误,请小心!

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