// // CustomizableSegmentControl.swift // WOKA // // Created by MacBook Pro on 27/05/24. // import UIKit class CustomizableSegmentControl: UISegmentedControl { private(set) lazy var radius:CGFloat = bounds.height / 2 private let segmentInset: CGFloat = 5 private let segmentImage: UIImage? = UIImage(color: UIColor.white) override init(items: [Any]?) { super.init(items: items) selectedSegmentIndex = 0 } required init?(coder: NSCoder) { // fatalError("init(coder:) has not been implemented") super.init(coder: coder) } override func layoutSubviews(){ super.layoutSubviews() self.backgroundColor = #colorLiteral(red: 0.01960784314, green: 0, blue: 0.2196078431, alpha: 1) // selected option color self.setTitleTextAttributes([.foregroundColor: UIColor.black, .font : UIFont.systemFont(ofSize: 16, weight: .heavy)], for: .selected) // color of other options self.setTitleTextAttributes([.foregroundColor: UIColor.white, .font : UIFont.systemFont(ofSize: 16, weight: .heavy)], for: .normal) //background layer.cornerRadius = radius //foreground let foregroundIndex = numberOfSegments if subviews.indices.contains(foregroundIndex), let foregroundImageView = subviews[foregroundIndex] as? UIImageView{ foregroundImageView.bounds = foregroundImageView.bounds.insetBy(dx: segmentInset, dy: segmentInset) foregroundImageView.image = segmentImage //substitute with our own colored image foregroundImageView.layer.removeAnimation(forKey: "SelectionBounds") //this removes the weird scaling animation! foregroundImageView.layer.masksToBounds = true foregroundImageView.layer.cornerRadius = foregroundImageView.bounds.height/2 } } } extension UIImage{ //creates a UIImage given a UIColor public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) { let rect = CGRect(origin: .zero, size: size) UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0) color.setFill() UIRectFill(rect) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() guard let cgImage = image?.cgImage else { return nil } self.init(cgImage: cgImage) } }