【问题标题】:Can't get pan gesture working无法使平移手势工作
【发布时间】:2016-09-27 04:28:31
【问题描述】:

我正在尝试使用 swift 添加平移手势,但无法正常工作。在解决这个问题时,我只能确认处理程序没有被调用。有一个 UIViewController 的子类,称为 RMConstructionViewController。在这个控制器中,我有一个滚动视图,其中包含一个 UIView,它占据了整个空间作为我的内容。然后,我以编程方式将子视图添加到我的 contentView。我的完整观点如下:

  1. UIView -> RMConstructionViewController
  2. UIScrollView -> 滚动视图
  3. UIView -> 我的内容视图
  4. UIView -> 以编程方式添加称为 upperView
  5. UIView -> 我要平移的视图叫做 symbolView
  6. UILabel -> 我想让 symbolView 容纳一些项目,但现在它只包含一个标签,并且调整到适合标签的大小。

我想我对目标到底是什么等感到困惑。这是我认为可行的方法:

let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handleDatePan(_:)))
symbolView.addGestureRecognizer(gestureRecognizer)

在上面的代码之后,我立即将我的 symbolView 添加到 upperView:

upperView.addSubview(symbolView)

那么我的处理程序是:

@IBAction func handleDatePan(gestureRecognizer: UIPanGestureRecognizer) {
    if gestureRecognizer.state == UIGestureRecognizerState.Began || gestureRecognizer.state == UIGestureRecognizerState.Changed {

        let translation = gestureRecognizer.translationInView(upperView)
        if gestureRecognizer.view!.center.x >= 0 && gestureRecognizer.view!.center.x <= currentRoadmap!.timeline!.width{
            gestureRecognizer.view!.center = CGPointMake(gestureRecognizer.view!.center.x + translation.x, gestureRecognizer.view!.center.y)
            if gestureRecognizer.view!.center.x < 0 {
                gestureRecognizer.view!.center.x = 0
            }
            if gestureRecognizer.view!.center.x > currentRoadmap!.timeline!.width {
                gestureRecognizer.view!.center.x = currentRoadmap!.timeline!.width
            }
            gestureRecognizer.setTranslation(CGPointMake(0,0), inView: upperView)
        }
    }
}

在上面的代码中,“currentRoadmap!.timeline!.width 等同于 CGFloat

任何想法为什么我不能让平底锅工作?

【问题讨论】:

    标签: ios swift gestures


    【解决方案1】:

    问题可能与UIScrollView 有自己的GestureRecognizer 有关。 UIGestureRecognizerDelegate 协议有一个方法允许多个 GestureRecognizers 同时处理事件:

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
    

    【讨论】:

    • 我也有同样的想法(经过几个小时试图让它工作)并添加了你上面提到的代码。它没有帮助。
    【解决方案2】:

    我终于明白了。当以编程方式设置手势时,工作的目标是我的班级(自我)。然后让这个工作的唯一方法是将我的子视图(symbolView)直接添加到scrollView。因此,我想在视图层次结构中构建一些禁止平移手势起作用的东西。我实际上不知道为什么层次结构是问题所在,但我确实让它起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      相关资源
      最近更新 更多