我有一个UIViewController,其中一个视图添加了自定义UIGestureRecognizer。问题是我从DialGestureRecognizer获取所有触摸打印行,但从未调用handleDial操作。 (iOS 8 / Xcode 6.1.1)我做错了什么?任何帮助表示赞赏。
@IBOutlet var dialView:UIView?
override func viewDidLoad() {
super.viewDidLoad()
if let _dialView = dialView? {
let recognizer = DialGestureRecognizer(target:self, action:"handleDial:")
_dialView.addGestureRecognizer(recognizer)
}
func handleDial(recognizer:DialGestureRecognizer) {
println("handleDial")
}
}
自定义(剥离)UIGestureRecognizer看起来像这样
class DialGestureRecognizer:UIGestureRecognizer {
func touchesBegan(touches:NSSet!, withEvent event:UIEvent!) {
println("touchesBegan")
}
func touchesMoved(touches:NSSet!, withEvent event:UIEvent!) {
println("touchesMoved")
}
func touchesEnded(touches:NSSet!, withEvent event:UIEvent!) {
println("touchesEnded")
}
}
答案 0 :(得分:2)
您必须从手势识别器内触发选择器。 要触发选择器,您必须修改UIGestureRecognizer的state属性。这家酒店只读。
要进行修改,您必须按如下方式添加BridgingHeader。
您需要拥有或创建一个-Bridging-Header.h
文件来导入Objective C标题,例如您想要的标题。
如果您的应用中还没有桥头文件,最简单的方法是在项目中添加一个objc类,xcode会询问您是否需要,然后创建文件和将它与您的设置联系起来。然后,您可以删除objc类。
将下一行添加到Bridging Header
文件。
#import <UIKit/UIGestureRecognizerSubclass.h>
然后,您可以修改self.state
属性以获取触发的事件。
override func touchesBegan(touches:NSSet!, withEvent event:UIEvent!) {
println("touchesBegan")
self.state = UIGestureRecognizerState.Began
}
欲了解更多信息,请阅读 http://www.raywenderlich.com/76020/using-uigesturerecognizer-with-swift-tutorial