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