UISlider setMaximumTrackTintColor в iOS 7.1
[slider setMaximumTrackTintColor: color]
имеет неожиданные результаты в iOS 7.1 (ползунок изменяет свое положение, появляющееся сверху, а не вертикальное или полностью исчезает), при этом отлично работает с предыдущими версиями.
[slider setMinimumTrackTintColor: color]
делает ожидаемый результат.
Этот вопрос может быть связан: UISlider setMaximumTrackTintColor,
но ответа пока нет.
Update:
Я получаю это:
вместо: ![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 получит
![введите описание изображения здесь]()