Swift:左侧滑动的判断,连动。

来源:互联网 发布:php不好找工作 编辑:程序博客网 时间:2024/04/30 02:30

HomeViewController.swift


func setBarUI() {

        ...

        //一定要将menuView.view添加进去

        UIApplication.shared.keyWindow?.addSubview(menuView.view)

        menuView.bindtoNav =navigationController?.tabBarController

        view.addGestureRecognizer(UIPanGestureRecognizer(target:self, action:#selector(panGesture(pan:))))

        menuView.view.addGestureRecognizer(UIPanGestureRecognizer(target:self,     action:#selector(panGesture(pan:))))

    }


  func panGesture(pan:UIPanGestureRecognizer) {

        menuView.panGesture(pan: pan)

    }



MenuViewController.swift


var bindtoNav: UITabBarController?


let menuView = MenuViewController.shareInstance

  var showView =false {

        didSet {

            showView ?showMenu() : dismissMenu()

        }

    }



extension MenuViewController {

    

    staticlet shareInstance = createMenuView()

    

    privatestatic func createMenuView() ->MenuViewController {

        let storyboard =UIStoryboard.init(name:"Main", bundle: Bundle.main)

        let menuView = storyboard.instantiateViewController(withIdentifier:"MenuViewController") as? MenuViewController

        menuView?.view.frame =CGRect.init(x:-225, y: 0, width:225, height: screenH)

        return menuView!

    

 func panGesture(pan:UIPanGestureRecognizer) {

        let xoff = pan.translation(in:view).x

        if pan.state == .began {

            beganDate =Date()

        }

        if pan.state == .ended {

            endDate =Date()

            //区分是轻扫还是滑动,nanoseconds:毫微秒十亿分之一秒

            ifendDate! <beganDate! +150000000.nanoseconds {

                if xoff >0 {

                    showView =true

                } else {

                    showView =false

                }

                return

            }

        }

        if (0 < xoff&& xoff <= 225&& !showView)|| (0 > xoff&& xoff >= -225&& showView) {

            if pan.translation(in:view).x >0 {

                moveMenu(pan.translation(in:view).x)

            } else {

                moveMenu(225 + pan.translation(in:view).x)

            }

            if pan.state == .ended {

                ifshowView {

                    if pan.translation(in:view).x <-175 {

                        showView =false

                    } else {

                        showView =true

                    }

                } else {

                    if pan.translation(in:view).x >50 {

                        showView =true

                    } else {

                        showView =false

                    }

                }

            }

        }

    }

    

    func moveMenu(_ xoff:CGFloat) {

        let view =UIApplication.shared.keyWindow?.subviews.first

        let menuView =UIApplication.shared.keyWindow?.subviews.last

        UIApplication.shared.keyWindow?.bringSubview(toFront: (UIApplication.shared.keyWindow?.subviews[1])!)

        view?.transform =CGAffineTransform.init(translationX: xoff, y:0)

        //menuViewview一样的行为

        menuView?.transform = (view?.transform)!

    }

    

    func showMenu() {

        let view =UIApplication.shared.keyWindow?.subviews.first

        let menuView =UIApplication.shared.keyWindow?.subviews.last

        UIApplication.shared.keyWindow?.bringSubview(toFront: (UIApplication.shared.keyWindow?.subviews[1])!)

        UIView.animate(withDuration:0.5, animations: { 

            view?.transform =CGAffineTransform.init(translationX:225, y: 0)

            menuView?.transform = (view?.transform)!

        })

    }

    

    func dismissMenu() {

        let view =UIApplication.shared.keyWindow?.subviews.first

        let menuView =UIApplication.shared.keyWindow?.subviews.last

        UIApplication.shared.keyWindow?.bringSubview(toFront: (UIApplication.shared.keyWindow?.subviews[1])!)

        UIView.animate(withDuration:0.5, animations: {

            view?.transform =CGAffineTransform.init(translationX:0, y: 0)

            menuView?.transform = (view?.transform)!

        })

    }

    



}



0 0
原创粉丝点击