UITapGestureRecognizer无法与自定义视图类一起使用

时间:2020-03-30 13:18:56

标签: ios swift uitapgesturerecognizer

UITapGestureRecognizer代码1 中可以很好地工作。 tapAction被正常调用。 但是,它在代码2 中不起作用。有人可以告诉我代码2 怎么了吗?

Thisthis是非常相似的问题,但仍然无法弄清楚)?

代码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")
    }
}

1 个答案:

答案 0 :(得分:1)

您正在创建一个子视图,在这种情况下,该子视图超出了父边界,因为视图主视图具有100高度和100宽度,并且子视图位于x:100和y:100,从而位于父母的确切末端。

您在initView中创建的子视图应起源于(x: 0, y: 0)