Reputation: 177
This is the code I have written for my Tab bar controller :
class TabBarUiViewController: UITabBarController {
let layerGradient = CAGradientLayer()
override func viewDidLoad() {
layerGradient.colors = [UIColor.init(red: 247/255, green: 146/255, blue: 30/255, alpha: 1).cgColor, UIColor.init(red: 236/255, green: 104/255, blue: 66/255, alpha: 1).cgColor]
layerGradient.startPoint = CGPoint(x: 0, y: 0.5)
layerGradient.endPoint = CGPoint(x: 1, y: 0.5)
layerGradient.frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height)
self.tabBar.layer.insertSublayer(layerGradient,at:0)
self.tabBar.unselectedItemTintColor = .black
super.viewDidLoad()
}
}
I want the same color and pattern for navigation controller bar. what should I do? As i tried it wasn't as easy as tab bar gradient I'm looking for a new swift source
Upvotes: 1
Views: 704
Reputation: 667
For Tabbar: use addSublayer instead of insertSublayer.
class TabBarUiViewController: UITabBarController {
let layerGradient = CAGradientLayer()
override func viewDidLoad() {
super.viewDidLoad()
layerGradient.colors = [UIColor.red.cgColor, UIColor.yellow.cgColor]
layerGradient.startPoint = CGPoint(x: 0, y: 0.5)
layerGradient.endPoint = CGPoint(x: 1, y: 0.5)
layerGradient.frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height)
self.tabBar.layer.addSublayer(layerGradient)
}
}
And for navigation bar:
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Gradient Navigation Bar"
if let navFrame = self.navigationController?.navigationBar.frame {
let newframe = CGRect(origin: .zero, size: CGSize(width: navFrame.width, height: (navFrame.height + UIApplication.shared.statusBarFrame.height) ))
let image = gradientWithFrametoImage(frame: newframe, colors: [UIColor.red.cgColor, UIColor.blue.cgColor])!
self.navigationController?.navigationBar.barTintColor = UIColor(patternImage: image)
}
}
func gradientWithFrametoImage(frame: CGRect, colors: [CGColor]) -> UIImage? {
let gradient: CAGradientLayer = CAGradientLayer(layer: self.view.layer)
gradient.frame = frame
gradient.colors = colors
UIGraphicsBeginImageContext(frame.size)
gradient.render(in: UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
Hope this helps you.
Upvotes: 2