2014-12-25 3 views
1

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

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

mySlider.maximumTrackTintColor = self.view.tintColor 

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

Я попытался

mySlider.minimumTrackTintColor = mySlider.maximumTrackTintColor 

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

+0

Я знаю, что могу do 'UIColor.lightGrayColor()', но цвет по умолчанию может измениться в будущей версии iOS, поэтому я хочу программно узнать, что используется в UISlider. – Grezzo

+0

Вы хотите изменить насыщенность цвета? –

+0

@LeonardoSavioDabus По умолчанию дорожка слева от большого пальца синего цвета, а справа - серая. Я хочу, чтобы слева от большого пальца был серый и справа, чтобы быть серым. Но я не хочу, чтобы он был серым; Я хочу узнать, какие цвета используются UISlider и обменять их. – Grezzo

ответ

2

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

Использование изображенияForState.

Вы можете получить изображения с помощью 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 
} 

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

enter image description here

+0

Хорошо, что он использует изображения, а не оттенки. Но ваш код просто, кажется, делает дорожки толще, он не меняет цвета – Grezzo

+0

@Grezzo Не могли бы вы предоставить дополнительную информацию? Я обновил ответ, получив результат, и кажется, что он меняет цвета и не делает дорожки толще. Какой у вас код? Что вы видите после установки правильных изображений для состояний? – siejkowski

+1

Я использовал ваш код, но изменил 'слайдер' на свой слайдер IBOutlet (называемый' rightSlider'). Я записал минимальный/максимальный цвет/изображение, и все были «ноль». Я изменил комментарий «что-то изменил» к зарегистрированной строке, и это закончилось тем, что вы вошли в систему. – Grezzo