Как я могу нажать кнопку за полноэкранным UIView?

Я хочу показать эффект градиента на моей странице (UIViewController). Поэтому я добавил UIView со свойством градиентного цвета фона в качестве последнего слоя. Но я не могу нажать кнопку (конечно) после того, как я добавил этот UIView . Как я могу решить эту проблему? Я должен показать свою страницу с эффектом градиента. Градиентный слой должен быть выше (вверху) страницы.

import UIKit

class ViewController: UIViewController {

    lazy var contentViewOutlet : UIView =
        {
            let myUiView = UIView()
            return myUiView
    }()

    lazy var myButton : UIButton =
        {
            let mybutton = UIButton()
            mybutton.setTitle("i want to be clicked :)", for: .normal)
            mybutton.backgroundColor = .green
            return mybutton
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(myButton)
        myButton.translatesAutoresizingMaskIntoConstraints = false

        myButton.topAnchor.constraint(equalTo: view.topAnchor, constant: 50).isActive = true
        myButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        myButton.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.2).isActive = true
        myButton.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.2).isActive = true
        myButton.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)

        view.addSubview(contentViewOutlet)
        contentViewOutlet.translatesAutoresizingMaskIntoConstraints = false
        contentViewOutlet.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        contentViewOutlet.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        contentViewOutlet.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        contentViewOutlet.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
        contentViewOutlet.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true

        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = self.view.bounds
        gradientLayer.colors = [UIColor.white.cgColor, UIColor.yellow.cgColor]
        contentViewOutlet.layer.insertSublayer(gradientLayer, at: 0)
        contentViewOutlet.alpha = 0.8
        view.layoutIfNeeded()

    }

    @objc func buttonAction(sender: UIButton!) {
        print("Button tapped")
    }
}

Всего 2 ответа


использование

class TransView:UIView { 
    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        return false
    } 
}

тогда

lazy var contentViewOutlet : TransView = {
    let myUiView = TransView()
    return myUiView
}()

Вы можете попробовать это:

yourView.bringSubViewToFront (yourButton)

Надеюсь, это поможет...


Есть идеи?

10000