Reputation: 2263
I'm trying to make a UISlider have the tint colour on the right side and the dull colour on the left side (swap them around)
I'm able to get the correct colour on the right with
mySlider.maximumTrackTintColor = self.view.tintColor
but I don't know how to get the grey colour in order to set the minimumTrackTintColor
.
I tried
mySlider.minimumTrackTintColor = mySlider.maximumTrackTintColor
before I set the maximumTrackTintColor
but that doesn't work because mySlider.maximumTrackTintColor
returns nil if a custom colour hasn't been set.
Upvotes: 3
Views: 1875
Reputation: 1681
Ok, so the problem is that you are trying to get the tintColor, but the default vanilla iOS8 non-customised UISlider is not using tintColor to set its colors.
It's using imageForState.
So you can get the images with slider.minimumTrackImageForState(UIControlState.Normal)!
and slider.maximumTrackImageForState(UIControlState.Normal)!
methods.
However, to be more defensive I'd recommend trying both approaches:
let minimumColor = slider.minimumTrackTintColor
let maximumColor = slider.maximumTrackTintColor
let minimumImage = slider.minimumTrackImageForState(UIControlState.Normal)
let maximumImage = slider.maximumTrackImageForState(UIControlState.Normal)
if let minimumColor = minimumColor {
slider.maximumTrackTintColor = minimumColor
} else if let minimumImage = minimumImage {
slider.setMaximumTrackImage(minimumImage, forState: .Normal)
} else {
// ok, something has changed the big way, just fallback on some color you like
}
if let maximumColor = maximumColor {
slider.minimumTrackTintColor = maximumColor
} else if let maximumImage = maximumImage {
slider.setMinimumTrackImage(maximumImage, forState: .Normal)
} else {
// ok, something has changed the big way, just fallback on some color you like
}
The result is (top image before, down image after):
Upvotes: 3