我想为每个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。
我真的不明白我的问题在哪里?
答案 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