Как я могу получить максимальный максимумTrackTintColor по умолчанию для UISlider

Я пытаюсь сделать UISlider иметь цвет оттенка с правой стороны и тусклый цвет с левой стороны (обменивать их вокруг)

Я могу получить правильный цвет справа

mySlider.maximumTrackTintColor = self.view.tintColor

но я не знаю, как получить серый цвет, чтобы установить minimumTrackTintColor.

Я пытался

mySlider.minimumTrackTintColor = mySlider.maximumTrackTintColor

прежде чем установить maximumTrackTintColor но это не работает, потому что mySlider.maximumTrackTintColor возвращает nil, если пользовательский цвет не был установлен.

1 ответ

Итак, проблема заключается в том, что вы пытаетесь получить tintColor, но по умолчанию нестандартный UISlider от villa iOS8 не использует tintColor для установки его цветов.

Он использует imageForState.

Таким образом, вы можете получить изображения с помощью slider.minimumTrackImageForState(UIControlState.Normal)! и slider.maximumTrackImageForState(UIControlState.Normal)! методы.

Однако, чтобы быть более защитным, я бы рекомендовал попробовать оба подхода:

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
}

В результате (верхнее изображение перед, вниз изображение после):

licensed under cc by-sa 3.0 with attribution.