用于音乐节目的TabBarController

Vas*_*014 6 tabbar uitabbarcontroller uitabbaritem ios swift

tabBarController用来创建一个音乐程序,我有如gif所示的如何操作的问题

问题:

  1. 怎么做,当你点击tabBarItem时," presentViewController"工作

  2. 如何使照片不会改变颜色并使其变圆,仅在第三个 tabBarItem

    最好没有库

在此输入图像描述

它应该是

在此输入图像描述

我的TabBarController

override func viewDidLoad() {
     super.viewDidLoad()

    self.delegate = self

    // ?????? ???? ???? tabBar
    self.tabBar.barTintColor = .white

    // ?????? ???? UITabBarItem and Title
    UITabBar.appearance().tintColor = UIColor(hex: 0x0077fe, alpha: 1)

    //?????? ???? background UITabBar
    UITabBar.appearance().barTintColor = UIColor.white


    // ?????? ??? ?????
    for item in self.tabBar.items! {
        if let image = item.image {
            item.image = image.withRenderingMode(.alwaysOriginal)

        }
    }

    //?????????? ? ????????? ? ???????????
    let storyBoard = UIStoryboard(name: "Main", bundle:nil)
    let controller1 = storyBoard.instantiateViewController(withIdentifier: "main") as! VCMain
    let controller2 = storyBoard.instantiateViewController(withIdentifier: "search")
    let controller3 = storyBoard.instantiateViewController(withIdentifier: "player")
    let controller4 = storyBoard.instantiateViewController(withIdentifier: "bookmark")
    let controller5 = storyBoard.instantiateViewController(withIdentifier: "menu")

    self.setViewControllers([controller1,controller2,controller3,controller4,controller5], animated: true)

    // ??????? ????????????? ?????????? ??? ????????????
    let vc1 = UINavigationController(rootViewController: controller1)
    let vc2 = UINavigationController(rootViewController: controller2)
    let vc3 = UINavigationController(rootViewController: controller3)
    let vc4 = UINavigationController(rootViewController: controller4)
    let vc5 = UINavigationController(rootViewController: controller5)

    viewControllers = [vc1, vc2, vc3, vc4, vc5]

}

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {

    print(item.tag)
    if item.tag == 0{
        if GlobalModals.count != 0 {
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let vc = storyboard.instantiateViewController(withIdentifier: "player") as? VCPlayer
            self.present(vc!, animated: true, completion: nil)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

播放机

override func viewDidLoad() {
    super.viewDidLoad()

        let im = Extension.resizeImage(image:GlobalModals[thisSong].ImageView! , targetSize: CGSize.init(width:20, height: 20))
        self.tabBarController?.tabBar.items![2].image = im
    }
 }
Run Code Online (Sandbox Code Playgroud)

Vas*_*014 1

我在 tabBarController 中创建了一个视图和一个按钮,并创建了一个函数来设置参数并在设置所有视图控制器后调用它,还创建了一个可以从另一个控制器更改按钮图像的通知中心

\n\n
class TabBarController: UITabBarController,UITabBarControllerDelegate {\n\n\nopen var playerBtn = UIButton()\n\n//func for NotificationCenter\n@objc func imageChange() {\n    if GlobalModals.count != 0 {\n        playerBtn.setImage(GlobalModals[thisSong].ImageView, for: .normal)\n    }\n}\n\noverride func viewDidLoad() {\n    super.viewDidLoad()\n\n    NotificationCenter.default.addObserver(self, selector: #selector(imageChange), name: NSNotification.Name(rawValue: "imageChange"), object: nil)\n\n    self.delegate = self\n\n    //shows and goes to controllers\n    let storyBoard = UIStoryboard(name: "Main", bundle:nil)\n    let controller1 = storyBoard.instantiateViewController(withIdentifier: "main") as! VCMain\n    let controller2 = storyBoard.instantiateViewController(withIdentifier: "search")\n    let controller3 = storyBoard.instantiateViewController(withIdentifier: "player")\n    let controller4 = storyBoard.instantiateViewController(withIdentifier: "bookmark")\n    let controller5 = storyBoard.instantiateViewController(withIdentifier: "menu")\n\n    self.setViewControllers([controller1,controller2,controller4,controller5], animated: true)\n\n    // creates navigation controller\n    let vc1 = UINavigationController(rootViewController: controller1)\n    let vc2 = UINavigationController(rootViewController: controller2)\n    let vc3 = UINavigationController(rootViewController: controller3)\n    let vc4 = UINavigationController(rootViewController: controller4)\n    let vc5 = UINavigationController(rootViewController: controller5)\n\n    viewControllers = [vc1, vc2, vc3, vc4, vc5]\n\n    self.setupMiddleButton()\n\n\n\n}\n\n// TabBarButton \xe2\x80\x93 Setup Middle Button and View\nfunc setupMiddleButton() {\n    playerBtn.frame = CGRect(x: 0, y: 0, width: 45, height: 45)\n    var playerBtnFrame = playerBtn.frame\n    playerBtnFrame.origin.y = self.view.bounds.height - playerBtnFrame.height - 2\n    playerBtnFrame.origin.x = self.view.bounds.width / 2 - playerBtnFrame.size.width / 2\n    playerBtn.frame = playerBtnFrame\n    playerBtn.layer.cornerRadius = playerBtnFrame.height/2\n    playerBtn.layer.masksToBounds = true\n    playerBtn.contentMode = .scaleAspectFill\n\n\n    let view = UIView()\n    let width = self.view.frame.width/5\n    let xWidth = width*2\n    view.frame = CGRect(x:  xWidth , y: playerBtnFrame.origin.y - 2, width: self.view.frame.width/5, height: tabBar.frame.height)\n    view.backgroundColor = .clear\n    self.view.addSubview(view)\n    self.view.addSubview(playerBtn)\n\n    playerBtn.setImage(UIImage(named: "home"), for: UIControlState.normal)\n    playerBtn.addTarget(self, action: #selector(playerButtonAction), for: UIControlEvents.touchUpInside)\n\n    self.view.layoutIfNeeded()\n}\n\n// Button Touch Action\n@objc func playerButtonAction(sender: UIButton) {\n    if GlobalModals.count != 0  {\n        let storyboard = UIStoryboard(name: "Main", bundle: nil)\n        let vc = storyboard.instantiateViewController(withIdentifier: "player") as? VCPlayer\n        self.present(vc!, animated: true, completion: nil)\n    }\n}\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我改变了按钮的图像

\n\n
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "imageChange"), object: nil)\n
Run Code Online (Sandbox Code Playgroud)\n