Swift

 

import UIKit

class FatherView: UIView {

    override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {

        print("Detect Touch Event")

        if (self.hidden == false) && (alpha > 0) {            

            for subview in subviews {

                if CGRectContainsPoint(subview.frame, point) {

                    if subview.isKindOfClass(ChildView1) {

                        print("view 1")

                        return subview

                    }

                    if subview.isKindOfClass(ChildView2) {

                        print("view 2")

                        return subview

                    }

                }

            }

        }        

        return nil

    }

}

import UIKit

class ChildView1: UIView {}

import UIKit

class ChildView2: UIView {}

import UIKit

class ViewController: UIViewController {

    let father = FatherView()

    let child1 = ChildView1()

    let child2 = ChildView2()

    let child3 = ChildView2()

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        father.frame = CGRectMake(0, 0, 100, 100)

        child1.frame = CGRectMake(20, 20, 20, 20)

        child2.frame = CGRectMake(120, 120, 120, 120)

        child3.frame = CGRectMake(200, 200, 120, 120)

        

//        father.clipsToBounds = true

        father.backgroundColor = UIColor.grayColor()

        child1.backgroundColor = UIColor.redColor()

        child2.backgroundColor = UIColor.blueColor()

        child3.backgroundColor = UIColor.greenColor()

        

        view.addSubview(father)

        father.addSubview(child1)

        father.addSubview(child2)

        father.addSubview(child3)

        

        child1.addGestureRecognizer(

            UITapGestureRecognizer(target: self, action: #selector(touchTest1)))

        

        child2.addGestureRecognizer(

            UITapGestureRecognizer(target: self, action: #selector(touchTest2)))

        

        child3.addGestureRecognizer(

            UITapGestureRecognizer(target: self, action: #selector(touchTest3)))

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

    }

    func touchTest1() {

        print("test 1 ")

    }

    func touchTest2() {

        print("test 2 ")

    }

    func touchTest3() {

        print("test 3 ")

    }

}

原文地址:https://www.cnblogs.com/gongyuhonglou/p/10311533.html