2015-05-29 155 views
0

我試圖設置TabBarController內我的TabBar上的單個項目的圖標顏色和背景顏色。Swift TabBar項目的顏色和背景顏色

我在我的TabBar上有5個圖標,其中4個爲我設置了顏色,它只是我正在努力的最後一個圖標。我附上了一張圖片下面的鏈接,以顯示我想要實現的目標。

我的相機饋送中的特定圖標是(圖像中間的那個),這個圖標我想是白色的,背景是紅色的。 到目前爲止我的代碼是這樣的 - 在我的TabBarController:

var imageNames = ["FeedIcon", "ExploreIcon", "CameraIcon", "ActivityIcon", "MyProfileIcon"] 

    let tabItems = tabBar.items as! [UITabBarItem] 
    for (index, value) in enumerate(tabItems) 
    { 
     var imageName = imageNames[index] 
     value.image = UIImage(named: imageName) 
     value.imageInsets = UIEdgeInsetsMake(5.0, 0, -5.0, 0) 

    } 
    //for below i've used a extension for imageWithColor to set the color of my icons 
    for tabItems in self.tabBar.items as! [UITabBarItem] { 
     if let image = tabItems.image { 
      tabItems.image = image.imageWithColor(UIColor(red: 57.0/255.0, green: 57.0/255.0, blue: 57.0/255.0, alpha: 1.0)).imageWithRenderingMode(.AlwaysOriginal) 
     } 
    } 

我的分機:

extension UIImage { 
    func imageWithColor(tintColor: UIColor) -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) 

     let context = UIGraphicsGetCurrentContext() as CGContextRef 
     CGContextTranslateCTM(context, 0, self.size.height) 
     CGContextScaleCTM(context, 1.0, -1.0); 
     CGContextSetBlendMode(context, kCGBlendModeNormal) 

     let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect 
     CGContextClipToMask(context, rect, self.CGImage) 
     tintColor.setFill() 
     CGContextFillRect(context, rect) 

     let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage 
     UIGraphicsEndImageContext() 

     return newImage 
    } 
} 

enter image description here

回答

0

可能有點遲,但創造出這種 「相機項目」 我認爲唯一的解決方案是創建一個UIButton並將按鈕的中心設置爲UITabBar的中心。你可以看到如何在post中做到這一點。之後,您可以使用此背景色將圖像設置爲按鈕。

UPDATE:

我創造了這個sample project與SWIFT在這裏你可以看到如何添加上的TabBar這個按鈕寫。

主要問題是子類UITabBarController並添加該類的按鈕。

class TabBarViewController: UITabBarController { 

    override func viewDidLoad() { 

     super.viewDidLoad() 

    } 

    override func didReceiveMemoryWarning() { 

     super.didReceiveMemoryWarning() 

    } 

    override func viewDidAppear(animated: Bool) { 

     // Creates image of the Button 
     let imageCameraButton: UIImage! = UIImage(named: "cameraIcon") 

     // Creates a Button 
     let cameraButton = UIButton(type: .Custom) 
     // Sets width and height to the Button 
     cameraButton.frame = CGRectMake(0.0, 0.0, imageCameraButton.size.width, imageCameraButton.size.height); 
     // Sets image to the Button 
     cameraButton.setBackgroundImage(imageCameraButton, forState: .Normal) 
     // Sets the center of the Button to the center of the TabBar 
     cameraButton.center = self.tabBar.center 
     // Sets an action to the Button 
     cameraButton.addTarget(self, action: "doSomething", forControlEvents: .TouchUpInside) 

     // Adds the Button to the view 
     self.view.addSubview(cameraButton) 

    } 

    func doSomething() { 

     print("Action of camera button") 

    } 

} 
+0

謝謝@angeldev,我會看看這個,讓你知道它是否可以解決問題。 – ggomersall

+0

@ggomersall我只是嘗試在我的項目之一,它適用於我。我也很快就做到了。如果您有任何問題,請讓我知道:)。 – angeldev

+0

真棒!我會告訴你 – ggomersall