无法得到泛手势的工作

时间:2016-05-29 06:52:26

标签: ios swift gestures

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

  1. UIView - > RMConstructionViewController
  2. UIScrollView - >滚动视图
  3. UIView - >我的contentView
  4. UIView - >以编程方式添加名为upperView
  5. UIView - >我要泛的视图叫做symbolView
  6. UILabel - >我希望symbolView包含一些项目,但是现在它只包含一个标签,并且大小与标签大小相同。
  7. 我想我对目标究竟是什么感到困惑,等等。这就是我认为可行的方法:

    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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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