// // IHPresentBottom.swift // Inhealth // // Created by weclouds on 2020/1/7. // Copyright © 2020 weclouds. All rights reserved. // import UIKit class IHPresentBottom: UIPresentationController { var controllerHeight : CGFloat? = 0 lazy var backView: UIView = { let backView = UIView(frame: self.containerView!.bounds) backView.backgroundColor = UIColor.black.withAlphaComponent(0.4) let tap = UITapGestureRecognizer(target: self, action: #selector(onclick(_:))) tap.numberOfTapsRequired = 1 tap.numberOfTouchesRequired = 1 backView.addGestureRecognizer(tap) return backView }() override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) { super.init(presentedViewController: presentedViewController, presenting: presentingViewController) controllerHeight = presentedViewController.controllerHeight == 0 ? KSCREENHEIGHT : presentedViewController.controllerHeight } override func presentationTransitionWillBegin() { super.presentationTransitionWillBegin() self.backView.alpha = 0 self.containerView?.addSubview(self.backView) UIView.animate(withDuration: 1.0) { self.backView.alpha = 1 } } override func dismissalTransitionWillBegin() { super.dismissalTransitionWillBegin() UIView.animate(withDuration: 1.0) { self.backView.alpha = 0 } } override func dismissalTransitionDidEnd(_ completed: Bool) { super.dismissalTransitionDidEnd(completed) if completed == true { self.backView.removeFromSuperview() } } override var frameOfPresentedViewInContainerView: CGRect{ return CGRect(x: 0, y: KSCREENHEIGHT - controllerHeight!, width: KSCREENWIDTH, height: controllerHeight!) } @objc func onclick(_ gestureRecognzier:UIGestureRecognizer) { let point = gestureRecognzier.location(in: self.backView) let frame = self.frameOfPresentedViewInContainerView if frame.contains(point) == false { self.presentedViewController .dismiss(animated: true, completion: nil) } } }