class GenericPanGestureHandler: NSObject {
? ? //操作的對(duì)象視圖
? ? weak var handleView: UIView!
? ? //手勢的對(duì)象視圖
? ? weak var gestureView: UIView?
? ? //最大的Y值
? ? varmaxY:CGFloat=0
? ? //當(dāng)前的手勢觸發(fā)位置
? ? private var currentPoint: CGPoint = CGPoint.zero
? ? //手勢結(jié)束的回調(diào)
? ? var offsetCompleteBlock: (()->())?
? ? convenienceinit(gestureView:UIView,handleView:UIView, maxY:CGFloat) {
? ? ? ? self.init()
? ? ? ? self.gestureView= gestureView
? ? ? ? self.handleView= handleView
? ? ? ? self.maxY= maxY
? ? ? ? gestureView.addGestureRecognizer(self.panGesture)
? ? }
? ? override init() {
? ? ? ? super.init()
? ? }
? ? @objc private func panAction(gesture: UIPanGestureRecognizer) {
? ? ? ? letpointInSuperview = gesture.location(in:self.handleView?.superview)
? ? ? ? varafterY:CGFloat=0
? ? ? ? vardistance:CGFloat=0
? ? ? ? distance = pointInSuperview.y-self.currentPoint.y
? ? ? ? afterY = (self.handleView?.y??0)+distance
? ? ? ? switch(gesture.state) {
? ? ? ? case.began:
? ? ? ? ? ? self.currentPoint= pointInSuperview;
? ? ? ? case.changed:
? ? ? ? ? ? if(afterY<=self.maxY) {
? ? ? ? ? ? ? ? afterY =self.maxY;
? ? ? ? ? ? }
? ? ? ? ? ? self.handleView?.y= afterY;
? ? ? ? ? ? self.currentPoint= pointInSuperview;
? ? ? ? case.ended:
? ? ? ? ? ? self.currentPoint= pointInSuperview;
//? ? ? ? ? ? if (afterY > self.maxY + handleView.frame.height * 0.5) {
? ? ? ? ? ? ? ? self.handleView?.y=UIScreen.main.bounds.height;
? ? ? ? ? ? self.offsetCompleteBlock?()
//? ? ? ? ? ? }else{
//? ? ? ? ? ? ? ? self.handleView?.y = maxY
//? ? ? ? ? ? }
? ? ? ? default:
? ? ? ? ? ? break
? ? ? ? }
? ? }
? ? private lazy var panGesture: UIPanGestureRecognizer = {
? ? ? ? letgesture =UIPanGestureRecognizer.init(target:self, action:#selector(panAction(gesture:)))
? ? ? ? returngesture
? ? }()
}
----------------------------------------------------------------------------------------------
class showView: UIView {
? ? @IBOutlet var showAvIEW: UIView!
? ? @IBOutlet weak var mainView: UIView!
? ? @IBOutlet weak var headView: UIView!
? ? private var bottomBarGestureHandler: GenericPanGestureHandler?
? ? overrideinit(frame:CGRect) {
? ? ? ? super.init(frame: frame)
? ? ? ? // 加載xib
? ? ? ? showAvIEW= (Bundle.main.loadNibNamed("showView", owner:self, options:nil)?.lastas!UIView)
? ? ? ? ? ? ? ? // 設(shè)置frame
? ? ? ? showAvIEW.frame=self.bounds
? ? ? ? ? ? ? ? // 添加上去
? ? ? ? ? ? ? ? addSubview(showAvIEW)
? ? ? ? mainView.frame = CGRect.init(x: 0, y: UIScreen.main.bounds.height, width: mainView.frame.width, height: mainView.frame.height)
? ? ? ? ifletsuperview =? mainView.superview{
? ? ? ? ? ? self.bottomBarGestureHandler = GenericPanGestureHandler.init(gestureView: headView, handleView: mainView, maxY: superview.height - mainView.frame.height - 34)
? ? ? ? ? ? self.bottomBarGestureHandler?.offsetCompleteBlock = { [weak self] in
? ? ? ? ? ? ? ? self?.hidden()
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? requiredinit?(coder:NSCoder) {
? ? ? ? super.init(coder: coder)
? ? }
? ? funcshow() {
? ? ? ? UIApplication.shared.keyWindow?.addSubview(self)
? ? ? ? UIView.animate(withDuration:0.3) {
? ? ? ? ? ? self.mainView.frame = CGRect(x: 0, y: UIScreen.main.bounds.height - self.mainView.frame.height, width: self.mainView.frame.width, height: self.mainView.frame.height)
? ? ? ? }
? ? }
? ? funchidden() {
? ? ? ? UIView.animate(withDuration:0.3) {
? ? ? ? ? ? self.mainView.frame = CGRect(x: 0, y: UIScreen.main.bounds.height, width: self.mainView.frame.width, height: self.mainView.frame.height)
? ? ? ? } completion: {_in
? ? ? ? ? ? self.removeFromSuperview()
? ? ? ? }
? ? }
}
---------------------------------------------------------------------------------------------------
@objc func showAlert() {
? ? ? ? letview1 =showView.init(frame:CGRect(x:0, y:0, width:UIScreen.main.bounds.width, height:UIScreen.main.bounds.height))
? ? ? ? view1.show()
? ? }
--------------------------------------------------------------------------------------------
lazy var showMaskView: UIView = {
? ? ? ? letmaskView =UIView.init(frame:self.bounds)
? ? ? ? maskView.backgroundColor= .black
? ? ? ? maskView.alpha=0.8
? ? ? ? returnmaskView
? ? }()