juelizabeth
juelizabeth

Reputation: 505

UIGestureTap to dismiss view

I am trying to enable UIGestureTap on a custom view. I have a view controller, and in that view controller, when I press a button, a custom view pops up.

var transparentBackground = UIView()
       @IBAction func UserViewImage(_ sender: UIButton) -> Void {
     self.transparentBackground = UIView(frame: UIScreen.main.bounds)
            self.transparentBackground.backgroundColor = UIColor(white: 0.0, alpha: 0.4)
            UIApplication.shared.keyWindow!.addSubview(self.transparentBackground)
            self.opaqueView = self.setupOpaqueView()
            self.transparentBackground.addSubview(opaqueView)
            UIApplication.shared.keyWindow!.bringSubview(toFront: self.transparentBackground)
            self.view.bringSubview(toFront: transparentBackground)
       }

I want to be able to tap on the transparentBackground view and dismiss it. So I have a dismiss function called removeAnimate()

 func removeAnimate()
    {
        UIView.animate(withDuration: 0.25, animations: {
            self.transparentBackground.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
            self.transparentBackground.alpha = 0.0;

        }, completion:{(finished : Bool)  in
            if (finished)
            {
                self.transparentBackground.removeFromSuperview()
            }
        });
    }

So, in viewdidload I enabled the UITapGesture:

let gestureRecognizer = UITapGestureRecognizer(target: self, action:  #selector(removeAnimate))
            self.transparentBackground.addGestureRecognizer(gestureRecognizer)
            self.transparentBackground.isUserInteractionEnabled = true

I know the function removeAnimate works because I used it on a button in the transparentBackground view and it works perfectly. But when I tap on the transparentBackground view it does not dismiss and I am not sure what I am doing wrong

  func setupOpaqueView() -> UIView{


        let mainView = UIView(frame: CGRect(x: 16, y: 132, width: Int(UIScreen.main.bounds.width-32), height: 403))
        mainView.backgroundColor = UIColor.clear
        mainView.layer.cornerRadius = 6

        self.imageView = UIImageView(frame: CGRect(x: 29, y: 18, width: 274, height: 350))

        mainView.addSubview(OKbutton)
        mainView.addSubview(self.imageView)
        OKbutton.addTarget(self, action:  #selector(ThirdWheelViewController.handleOKButtonTapped(_:)), for: .touchUpInside)

        return mainView

    }

Upvotes: 0

Views: 54

Answers (1)

Mannopson
Mannopson

Reputation: 2684

This is an example and hope it helps you:

First of all create a variable:

var customView:UIView!

This is going to be our function for adding a custom view:

@IBAction func customAction(_ sender: AnyObject) {

    self.customView = UIView.init(frame: CGRect.init(x: self.view.bounds.width / 2, y: self.view.bounds.height / 2, width: 100, height: 100))
    self.customView.backgroundColor = UIColor.red
    self.view.addSubview(self.customView)

    let tap = UITapGestureRecognizer.init(target: self, action: #selector(self.removeFromSuperView))
    tap.numberOfTapsRequired = 1
    self.customView.addGestureRecognizer(tap)
}

And finally:

 func removeFromSuperView() {

    self.customView.alpha = 1.0
    self.customView.transform = .identity

    UIView.animate(withDuration: 0.3, animations: {

        self.customView.alpha = 0.0
        self.customView.transform = .init(scaleX: 1.5, y: 1.5)

        }) { (finished) in

            if !finished {

            } else {
              self.customView.removeFromSuperview()
            }

    }

}

Upvotes: 1

Related Questions