// // MyTabBarController.swift // wyy // // Created by 施书顺 on 2021/3/5. // import UIKit class MyTabBarController: UITabBarController { let sideBar = SideBarView() var sideBarWidth: CGFloat = 0 override func viewDidLoad() { super.viewDidLoad() print(view.subviews) addChildViewControllers() tabBar.barTintColor = UIColor.white tabBar.isTranslucent = false view.addSubview(sideBar) sideBar.layoutIfNeeded() sideBar.snp.makeConstraints{ make in make.left.equalTo(-sideBar.frame.width) } } func addChildViewControllers(){ setChildViewController(DiscoverViewController(), title: "发现", imageName: "discover", tag: 0) setChildViewController(PodCastViewController(), title: "博客", imageName: "podcast", tag: 1) setChildViewController(MineViewController(), title: "我的", imageName: "mine", tag: 2) setChildViewController(KaraokeViewController(), title: "K歌", imageName: "karaoke", tag: 3) setChildViewController(CommunityViewController(), title: "云村", imageName: "community", tag: 4) } func setChildViewController(_ childController: UIViewController, title: String, imageName: String, tag: Int) { let image = UIImage(named: imageName)?.withRenderingMode(.alwaysOriginal) childController.tabBarItem = UITabBarItem(title: title, image: image, tag: tag) // childController.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: 0, right: 0) childController.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .play, target: self, action: #selector(openSideBar)) let navVc = UINavigationController(rootViewController: childController) addChild(navVc) } override func touchesBegan(_ touches: Set, with event: UIEvent?) { let touch: UITouch? = touches.first guard let location = touch?.location(in: self.view) else { return } print(location) if !sideBar.frame.contains(location) { closeSideBar() } else { super.touchesBegan(touches, with: event) } } @objc func openSideBar(){ UIView.animate(withDuration: 0.5, animations: { self.sideBar.frame = CGRect(x: 150, y: self.sideBar.frame.origin.y, width: self.sideBar.frame.width, height: self.sideBar.frame.height) }, completion: { ok in self.selectedViewController?.view.isUserInteractionEnabled = false self.tabBar.items?.forEach{$0.isEnabled = false} }) } func closeSideBar(){ UIView.animate(withDuration: 0.5, animations: { self.sideBar.frame = CGRect(x: -150, y: self.sideBar.frame.origin.y, width: self.sideBar.frame.width, height: self.sideBar.frame.height) }, completion: { ok in self.selectedViewController?.view.isUserInteractionEnabled = true self.tabBar.items?.forEach{$0.isEnabled = true} }) } }