我将UITapGestureRecognizer
添加到了UIView
中。但是我不明白为什么我必须使用@objc
才能使用UITapGestureRecognizer
。
尤其是Selector?
和#selector
之间的区别太令人困惑了。
在official document of the Apple developer中没有看到使用@objc
的解释。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let viw = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
viw.center = self.view.center
viw.backgroundColor = UIColor.black
self.view.addSubview(viw)
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
viw.addGestureRecognizer(tap)
}
@objc func handleTap(sender: UITapGestureRecognizer) {
if sender.state == .ended {
print(1)
}
}
}
我认为这是一种旧方法。如果有将UITapGestureRecognizer
添加到UIView
的最新方法,我想知道。
答案 0 :(得分:1)
为什么使用@objc?
如果您使用的基本上是用Objective-C
编写的任何类选择器,则需要在该函数之前添加@objc
,以便UITapGestureRecognizer
类可以通过适当的事件返回。
如果在手势处理函数编译器未添加@objc
之前将引发错误,如下所述:
“#selector”的参数引用实例方法“ handleTap()”, 没有暴露于Objective-C
它清楚地表明您还没有暴露Objective-C
的句柄。
Apple正式链接语言互操作性
https://developer.apple.com/documentation/swift#2984801
也请查看此链接以获取有关
的更多信息Use runtime Obj C features in Swift
希望您可以得到上面解释的答案表格!