GestureRecognizer不会动态/在额外的类swift中工作

时间:2016-09-08 08:46:58

标签: ios swift uiviewcontroller uigesturerecognizer

我想为每个Viewcontroller实现一个手势识别器。

以下代码正在运行:

class ViewController: UIViewController {
   func draggedView(sender:UIPanGestureRecognizer){
    // do stuff
   }

   override func viewDidLoad() {
     super.viewDidLoad()

     let panRec = UIPanGestureRecognizer()
     panRec.addTarget(self, action: #selector(ViewController.draggedView(_:)))
     self.view.addGestureRecognizer(panRec)
     self.view.userInteractionEnabled = true   
     }
}

现在我想让这个泛手势更加动态/抽象

   class Tools : NSObject {

   var currentViewController: UIViewController? 

   func addPanToViewController(viewcontroller: UIViewController) {

    currentViewcontroller = viewcontroller

    if let currentViewcontroller = currentViewcontroller {
        let panRec = UIPanGestureRecognizer()
        panRec.addTarget(self, action: #selector(draggedView(_:)))
        currentViewcontroller.view.addGestureRecognizer(panRec)
        currentViewcontroller.view.userInteractionEnabled = true  
    } 

   }

 func draggedView(sender:UIPanGestureRecognizer) {
  //never called
 }
}

我像这样调用ViewController-Class中的代码:

    let sidemenu = Tools()
    sidemenu.addPanToViewController(self)

但没有任何反应。没有错误,但没有手势正在运行。使用调试器,我看到添加了手势。所以每个代码都会被执行。

我想在Tools类中执行draggedView。

我真的不明白我的问题在哪里?

2 个答案:

答案 0 :(得分:1)

我认为如果你想让它工作,你必须使Tools类成为单例:

static let sharedInstance = Tools()

然后在addPanToViewController

panRec.addTarget(Tools.sharedInstance, action:#selector(draggedView(_:)))

viewController

Tools.sharedInstance.addPanToViewController(self)

答案 1 :(得分:0)

currentViewcontroller.delegete = your gesturerecogniser delegate