UISlider setMaximumTrackTintColor в iOS 7.1

[slider setMaximumTrackTintColor: color]

имеет неожиданные результаты в iOS 7.1 (ползунок изменяет свое положение, появляющееся сверху, а не вертикальное или полностью исчезает), при этом отлично работает с предыдущими версиями.

[slider setMinimumTrackTintColor: color]

делает ожидаемый результат.

Этот вопрос может быть связан: UISlider setMaximumTrackTintColor, но ответа пока нет.

Update:

Я получаю это: wrong вместо: enter image description here

Обновление # 2:

Использование setMaximumTrackImage может работать, но решение, которое я ищу, - это способ установить любой случайный цвет, а не ранее существовавшее изображение.

Обновление # 3:

Эта проблема все еще присутствует в iOS 7.1.1.

Ответы

Ответ 1

Нашел этот workaroud:

Создайте 1x1px UIImage с UIColor на лету:

CGRect rect = CGRectMake(0, 0, 1, 1);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
[color setFill];
UIRectFill(rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

а затем

[slider setMaximumTrackImage:image forState:UIControlStateNormal];

Похоже на дорогостоящее решение, но оно выполняет свою работу.

Ответ 2

Попробуйте следующее:

UIImage *sliderLeftTrackImage = [[UIImage imageNamed:@"LeftImage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
UIImage *sliderRightTrackImage = [[UIImage imageNamed:@"RightImage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

[sliderName setMinimumTrackImage: sliderLeftTrackImage forState: UIControlStateNormal];
[sliderName setMaximumTrackImage: sliderRightTrackImage forState: UIControlStateNormal];

Если вы хотите изменить изображение большого пальца, будет работать следующий код:

[sliderName setThumbImage:[UIImage imageNamed:@"ThumbImgName.png"] forState:UIControlStateNormal];
[sliderName setThumbImage:[UIImage imageNamed:@"ThumbImgName.png"] forState:UIControlStateHighlighted];

Таким же образом вы можете использовать цвет вместо изображений.

Ответ 3

Обновление

Сообщается об этой ошибке, и она уже хорошо известна. Надеюсь, они скоро это исправит...

Ответ 4

Я создал 2px-изображения с цветом дорожки слайдера.

enter image description here

И затем я установил их как отслеживание изображений (здесь с изображением большого пальца для iPad и iPhone)

UIImage *thumbImage = [UIImage imageNamed:@"slider"];
UIImage *trackImage;

if (isiPad) {
    [[UISlider appearance] setThumbImage:thumbImage forState:UIControlStateNormal];
    [[UISlider appearance] setThumbImage:thumbImage forState:UIControlStateHighlighted];
    trackImage = [UIImage imageNamed:@"menu-bar-ipad"];
}
else {
    [[UISlider appearance] setThumbImage:[self imageWithImage:thumbImage scaledToSize:CGSizeMake(27, 27)] forState:UIControlStateNormal];
    [[UISlider appearance] setThumbImage:[self imageWithImage:thumbImage scaledToSize:CGSizeMake(27, 27)] forState:UIControlStateHighlighted];
    trackImage = [UIImage imageNamed:@"menu-bar"];
}

[[UISlider appearance]  setMinimumTrackImage:trackImage forState:UIControlStateNormal];
[[UISlider appearance]  setMaximumTrackImage:trackImage forState:UIControlStateNormal];

И это все. То же решение, что и msmq, я думаю. И вы можете увидеть оба способа, как сделать большое изображение - путь к двум изображениям и масштабирование.

Ответ 5

Может быть, немного поздно, но... вот ответ

Вы должны прочитать описание сеттера:

Цвет, используемый для выравнивания стандартных максимальных изображений дорожки. Установка этого свойство удаляет любые пользовательские максимальные изображения дорожек, связанные с слайдер.

Также это применимо только для maximum color, потому что minimum setter просто меняет titntColor:

Цвет, используемый для изменения стандартных минимальных изображений дорожек.

Это означает, что слайдер использует некоторое изображение для максимальной дорожки, и если вы только установили цвет оттенка, ничего не изменится (ничто не может быть окрашено).

введите описание изображения здесь

Решение (спасибо @user623396):

UIImage *currentSliderMaximumImage = self.slider.currentMaximumTrackImage;

CGRect rect = CGRectMake(0, 0, currentSliderMaximumImage.size.width, currentSliderMaximumImage.size.height);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
[[[DynamicUIService service] currentApplicationColor] setFill];
UIRectFill(rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.slider setMaximumTrackImage:image forState:UIControlStateNormal];

В результате u получит

введите описание изображения здесь