UITapGestureRecognizer 无法使用自定义视图 class
UITapGestureRecognizer not working with custom view class
UITapGestureRecognizer
在 代码 1 中工作得很好。 tapAction
按预期调用。
但是它在 code 2 中不起作用。有人可以告诉我 代码 2 有什么问题吗?
( and this 挺相似的题,还是想不通)
代码 1:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let myView : UIView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
myView.backgroundColor = .red
myView.addGestureRecognizer( UITapGestureRecognizer(target:self,action:#selector(self.tapAction)) )
self.view.addSubview(myView)
}
@objc func tapAction() {
print("tapped")
}
}
代码 2:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let myView = MyView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
self.view.addSubview(myView)
}
}
class MyView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
initView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func initView(){
let myView : UIView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
myView.backgroundColor = .red
myView.addGestureRecognizer(UITapGestureRecognizer(target:self,action:#selector(self.doSomethingOnTap)))
addSubview(myView)
}
@objc func doSomethingOnTap() {
print("tapped")
}
}
您正在创建一个子视图,在这种特殊情况下,它会超出父边界,因为视图主视图的高度为 100,宽度为 100,并且子视图位于 x: 100 和 y: 100,结果是位于父级的确切末尾。
您在 initView
中创建的子视图应该具有 (x: 0, y: 0)
来源。
UITapGestureRecognizer
在 代码 1 中工作得很好。 tapAction
按预期调用。
但是它在 code 2 中不起作用。有人可以告诉我 代码 2 有什么问题吗?
(
代码 1:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let myView : UIView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
myView.backgroundColor = .red
myView.addGestureRecognizer( UITapGestureRecognizer(target:self,action:#selector(self.tapAction)) )
self.view.addSubview(myView)
}
@objc func tapAction() {
print("tapped")
}
}
代码 2:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let myView = MyView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
self.view.addSubview(myView)
}
}
class MyView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
initView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func initView(){
let myView : UIView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
myView.backgroundColor = .red
myView.addGestureRecognizer(UITapGestureRecognizer(target:self,action:#selector(self.doSomethingOnTap)))
addSubview(myView)
}
@objc func doSomethingOnTap() {
print("tapped")
}
}
您正在创建一个子视图,在这种特殊情况下,它会超出父边界,因为视图主视图的高度为 100,宽度为 100,并且子视图位于 x: 100 和 y: 100,结果是位于父级的确切末尾。
您在 initView
中创建的子视图应该具有 (x: 0, y: 0)
来源。