GestureRecognizer 不起作用 dynamic/in 额外 class swift

GestureRecognizer doesnt work dynamic/in extra class swift

我想为每个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   
     }
}

现在我想再给这个平移手势一点dynamic/abstraction

   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)

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

我想在我的工具中执行 draggedView class。

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

currentViewcontroller.delegete = your gesturerecogniser delegate

我想如果你想让这个工作,你必须让工具 class 成为单身人士:

static let sharedInstance = Tools()

然后在 addPanToViewController:

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

在你的viewController中:

Tools.sharedInstance.addPanToViewController(self)