@IBAction func popView(_ sender: UIButton) {
    let popView = PopView()
    popView.setVisible()
    popView.animateView(view: popView.contentView)

}


popView是一个其中包含一些视图的viewcontroller,popView在其init()中使用setup()来设置这些视图。

    func setup(){
    view.frame = UIScreen.main.bounds

    baseView.frame = view.frame
    baseView.backgroundColor = UIColor.black
    //baseView.alpha = appearence.backgroundAlpha
    view.addSubview(baseView)

    contentView.backgroundColor = UIColor.white
    contentView.layer.cornerRadius = appearence.cornerRadius
    contentView.frame = CGRect(x: 10, y: 10, width: appearence.width, height: appearence.height)
    contentView.layer.masksToBounds = true
    contentView.center = CGPoint(x: self.view.bounds.midX , y: self.view.bounds.midY )


    baseView.addSubview(contentView)

    headView.frame = CGRect(x: 0, y: 0, width: contentView.bounds.width, height: contentView.bounds.height / 2)
    headView.backgroundColor = UIColorFromRGB(0xE64D4D)
    contentView.addSubview(headView)



    headImageView.image = UIImage(named: headImage)
    headImageView.contentMode = .center
    headImageView.frame.size = headImageView.image!.size
    headImageView.center = CGPoint(x: headView.bounds.midX, y: headView.bounds.midY)
    headView.addSubview(headImageView)



    let recognizer = UITapGestureRecognizer(target: self, action: #selector(self.hide(_: )))
    recognizer.numberOfTapsRequired = 1
    contentView.addGestureRecognizer(recognizer)
    print(String(describing: contentView.gestureRecognizers))
}


contentView有一个tapgesturerecognizer,但是当我点击时它不起作用

func hide(_ recognizer: UITapGestureRecognizer){
    self.view.removeFromSuperview()
}


popView是由ViewController类中的以下代码创建的

 @IBAction func popView(_ sender: UIButton) {
    let popView = PopView()
    popView.setVisible()
    popView.animateView(view: popView.contentView)

}

func setVisible(){
    let rootView = UIApplication.shared.keyWindow! as UIWindow
    rootView.addSubview(self.view)

}

func animateView(view: UIView){
    view.center = CGPoint(x: self.view.bounds.midX, y: self.view.bounds.minY - view.bounds.midY)
    UIView.animate(withDuration: 0.2, animations: {
        view.center = CGPoint(x: self.view.bounds.midX , y: self.view.bounds.midY + 50)
    }, completion: {(finished) -> Void in
        UIView.animate(withDuration: 0.1, animations: {
            view.center = CGPoint(x: self.view.bounds.midX , y: self.view.bounds.midY )

        })


    })
}


popView正确显示,但contentView不响应轻击手势。为什么?请帮助我〜

最佳答案

在popView的视图控制器(而不是contentview)上添加轻击手势。它将按以下方式工作。

let recognizer = UITapGestureRecognizer(target: self, action: #selector(self.hide(_: )))
        recognizer.numberOfTapsRequired = 1
        popView.view.addGestureRecognizer(recognizer)
        print(String(describing: popView.view.gestureRecognizers))


还将您的hide函数移到按钮操作类中。如下所示,隐藏并显示该类本身。

func hide(_ recognizer: UITapGestureRecognizer){
        self.popView.view.removeFromSuperview()

        let rootView = UIApplication.shared.keyWindow! as UIWindow
        rootView.addSubview(self.view)


    }


我希望这将有所帮助。

下面是我的PopView类代码:

import UIKit

class PopView: UIViewController {

    var baseView: UIView = UIView()
    var contentView: UIView = UIView()
    var headView: UIView = UIView()
    var headImageView: UIImageView = UIImageView()


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        self.setup()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func setup(){
        view.frame = UIScreen.main.bounds

        baseView.frame = view.frame
        baseView.backgroundColor = UIColor.black
        //baseView.alpha = appearence.backgroundAlpha
        view.addSubview(baseView)

        contentView.backgroundColor = UIColor.white
        contentView.layer.cornerRadius = 0.5
        contentView.frame = CGRect(x: 10, y: 10, width: 200, height: 200)
        contentView.layer.masksToBounds = true
        contentView.center = CGPoint(x: self.view.bounds.midX , y: self.view.bounds.midY )


        baseView.addSubview(contentView)

        headView.frame = CGRect(x: 0, y: 0, width: contentView.bounds.width, height: contentView.bounds.height / 2)
        headView.backgroundColor = UIColor.yellow
        contentView.addSubview(headView)



        headImageView.image = UIImage(named: "patternsPlaceholder")
        headImageView.contentMode = .center
        headImageView.frame.size = headImageView.image!.size
        headImageView.center = CGPoint(x: headView.bounds.midX, y: headView.bounds.midY)
        headView.addSubview(headImageView)

    }

    func setVisible(){
        let rootView = UIApplication.shared.keyWindow! as UIWindow
        rootView.addSubview(self.view)

    }

    func animateView(view: UIView){
        view.center = CGPoint(x: self.view.bounds.midX, y: self.view.bounds.minY - view.bounds.midY)
        UIView.animate(withDuration: 0.2, animations: {
            view.center = CGPoint(x: self.view.bounds.midX , y: self.view.bounds.midY + 50)
        }, completion: {(finished) -> Void in
            UIView.animate(withDuration: 0.1, animations: {
                view.center = CGPoint(x: self.view.bounds.midX , y: self.view.bounds.midY )

            })


        })
    }



    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}


下面是我的baseviewController代码。

import UIKit

class ViewController: UIViewController {

    var popView = PopView()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func popViewButtonAction(_ sender: Any) {

//        let popView = PopView()
        popView.setVisible()
        popView.animateView(view: popView.contentView)

        let recognizer = UITapGestureRecognizer(target: self, action: #selector(self.hide(_: )))
        recognizer.numberOfTapsRequired = 1
        popView.view.addGestureRecognizer(recognizer)
        print(String(describing: popView.view.gestureRecognizers))

    }

    func hide(_ recognizer: UITapGestureRecognizer){
        self.popView.view.removeFromSuperview()

        let rootView = UIApplication.shared.keyWindow! as UIWindow
        rootView.addSubview(self.view)


    }



}


我希望它能给您想法。

谢谢,
香卡

10-06 02:13