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

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 {

    

    static let shareInstance = createMenuView()

    

    private static 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: 毫微秒 十亿分之一秒

            if endDate! < 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 {

                if showView {

                    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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接着分析 (result (type_ident (component id='Bool' bind=Swift.(file).Bool))) (brace_stmt range=[re.swift:1:59 - line:14:1] (pattern_binding_decl range=[re.swift:2:5 - line:2:33] (pattern_named type='[UInt8]' 'b') Original init: (call_expr type='[UInt8]' location=re.swift:2:19 range=[re.swift:2:13 - line:2:33] nothrow (constructor_ref_call_expr type='(String.UTF8View) -> [UInt8]' location=re.swift:2:19 range=[re.swift:2:13 - line:2:19] nothrow (declref_expr implicit type='(Array<UInt8>.Type) -> (String.UTF8View) -> Array<UInt8>' location=re.swift:2:19 range=[re.swift:2:19 - line:2:19] decl=Swift.(file).Array extension.init(_:) [with (substitution_map generic_signature=<Element, S where Element == S.Element, S : Sequence> (substitution Element -> UInt8) (substitution S -> String.UTF8View))] function_ref=single) (argument_list implicit (argument (type_expr type='[UInt8].Type' location=re.swift:2:13 range=[re.swift:2:13 - line:2:19] typerepr='[UInt8]')) )) (argument_list (argument (member_ref_expr type='String.UTF8View' location=re.swift:2:29 range=[re.swift:2:21 - line:2:29] decl=Swift.(file).String extension.utf8 (declref_expr type='String' location=re.swift:2:21 range=[re.swift:2:21 - line:2:21] decl=re.(file).check(_:_:).encoded@re.swift:1:14 function_ref=unapplied))) )) Processed init: (call_expr type='[UInt8]' location=re.swift:2:19 range=[re.swift:2:13 - line:2:33] nothrow (constructor_ref_call_expr type='(String.UTF8View) -> [UInt8]' location=re.swift:2:19 range=[re.swift:2:13 - line:2:19] nothrow (declref_expr implicit type='(Array<UInt8>.Type) -> (String.UTF8View) -> Array<UInt8>' location=re.swift:2:19 range=[re.swift:2:19 - line:2:19] decl=Swift.(file).Array extension.init(_:) [with (substitution_map generic_signature=<Element, S where Element == S.Element, S : Sequence> (substitution Element -> UInt8) (substitution S -> String.UTF8View))] function_ref=single) (argument_list implicit (argument (type_expr type='[UInt8].Type' location=re.swift:2:13 range=[re.swift:2:13 - line:2:19] typerepr='[UInt8]')) )) (argument_list (argument (member_ref_expr type='String.UTF8View' location=re.swift:2:29 range=[re.swift:2:21 - line:2:29] decl=Swift.(file).String extension.utf8 (declref_expr type='String' location=re.swift:2:21 range=[re.swift:2:21 - line:2:21] decl=re.(file).check(_:_:).encoded@re.swift:1:14 function_ref=unapplied))) ))) (var_decl range=[re.swift:2:9 - line:2:9] "b" type='[UInt8]' interface type='[UInt8]' access=private readImpl=stored writeImpl=stored readWriteImpl=stored)
06-10

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值