我正在使用UISegmentControl
,并尝试为每个细分的视图提供自定义UIColor
。对于纯色,这很容易做到。我只是这样做:
providerSegmentedControl.subviews[1].tintColor = UIColor.red
现在索引1的句段将变成红色。
但是,我正在尝试为细分受众群tintColor
之一的UIView
添加渐变。我的资产中有一个名为“ AppleMusicGradient”的图像,看起来像这样:
我正在尝试使用UIColor
从该图像创建一个UIColor(patternImage:)
。代码如下:
//UIImage.resize is a UIImage extension function that simply resizes a UIImage to the given CGRect
let image = UIImage(named: "AppleMusicGradient")!.resize(targetSize: providerSegmentedControl.subviews[2].frame.size)
providerSegmentedControl.subviews[2].tintColor = UIColor(patternImage: image)
但是,此方法似乎只能部分起作用。选择给定的线段时,此渐变完全不可见。而且,当未选择给定的线段时,渐变仅在线段内部的标签上可见,即通常似乎没有边框。
请参阅“ Apple Music”部分。
答案 0 :(得分:0)
我的解决方案有点“ hacky”,但我相信这可能正是您想要的。
@IBOutlet weak var segmentedControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.updateGradientBackground()
}
private func updateGradientBackground() {
let sortedViews = segmentedControl.subviews.sorted( by: { $0.frame.origin.x < $1.frame.origin.x } )
for (index, view) in sortedViews.enumerated() {
if index == segmentedControl.selectedSegmentIndex {
view.backgroundColor = UIColor(patternImage: UIImage(named: "7Wk4B")!)
view.tintColor = UIColor.clear
let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
UISegmentedControl.appearance().setTitleTextAttributes(titleTextAttributes, for: .selected)
} else {
view.backgroundColor = UIColor.white
view.tintColor = UIColor.blue
}
}
}
@IBAction func segmentedControllerTapped(_ sender: Any) {
self.updateGradientBackground()
}