Изменить изображение iPhone UISlider iPhone
Я использую UISlider
в своем приложении, но я бы хотел использовать для него "внешний вид". Я изменил большой палец на свое собственное изображение, но есть ли способ изменить планку тоже? У меня есть образ бара, который я хотел бы использовать, но не могу понять, как это сделать.
Я нашел, как изменить максимальное и минимальное изображение, но не панель.
Ответы
Ответ 1
Вы были правы в использовании методов -setMinimumTrackImage:forState:
и -setMaximumTrackImage:forState:
. То, что вы пропустили, состоит в том, что вам следует предоставить растяжимое UIImage
для них, остальное позаботится об автоматическом:
UIImage *sliderLeftTrackImage = [[UIImage imageNamed: @"SliderMin.png"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
UIImage *sliderRightTrackImage = [[UIImage imageNamed: @"SliderMax.png"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
[mySlider setMinimumTrackImage: sliderLeftTrackImage forState: UIControlStateNormal];
[mySlider setMaximumTrackImage: sliderRightTrackImage forState: UIControlStateNormal];
Вы можете использовать одно и то же изображение для минимальной и минимальной частей.
Ответ 2
Простейшим решением было бы сделать UIImage за элементом управления для представления дорожки. Палец вверх можно изменить с помощью:
[mySlider setThumbImage:[UIImage imageNamed:@"thumb_image.png"] forState:UIControlStateNormal];
Побочным эффектом этого является то, что дорожка не отображается, если вы не предоставите свой собственный. Это, в сочетании с UIImage, предоставит вам пользовательский UISlider без необходимости подкласса.
Ответ 3
Совмещение современного стиля
Если вы определяете UISlider в Storyboard, лучшее место для стиля, которое Slider находится в подклассе View. В awakeFromNib вы можете изменить кнопку, левую и правую дорожку.
Этот вызов устарел в iOS 5 stretchableImageWithLeftCapWidth:topCapHeight:
- (void)awakeFromNib
{
[super awakeFromNib];
UIImage *thumbImage = [UIImage imageNamed:@"slider-button"];
[self.slider setThumbImage:thumbImage forState:UIControlStateNormal];
UIImage *sliderLeftTrackImage = [UIImage imageNamed: @"slider-fill"];
sliderLeftTrackImage = [sliderLeftTrackImage resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch];
UIImage *sliderRightTrackImage = [UIImage imageNamed: @"slider-track"];
sliderRightTrackImage = [sliderRightTrackImage resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch];
[self.slider setMinimumTrackImage:sliderLeftTrackImage forState:UIControlStateNormal];
[self.slider setMaximumTrackImage:sliderRightTrackImage forState:UIControlStateNormal];
}
Ответ 4
stretchableImageWithLeftCapWidth: устарел с iOS 5.0. Документы говорят, что вместо этого используют свойство capInsets. Вот простой способ сделать это:
Создайте три изображения, минимальную (левую) дорожку, максимальную (правую) дорожку и большой палец. В этом примере предположим, что минимальные и максимальные изображения треков составляют 34p H x 18p W, что-то вроде этого:
и это:
.
Создайте изображения как обычно:
UIImage *thumbImage = [UIImage imageNamed:@"sliderThumb.png"];
UIImage *sliderMinTrackImage = [UIImage imageNamed: @"sliderMin.png"];
UIImage *sliderMaxTrackImage = [UIImage imageNamed: @"sliderMax.png"];
Для моих 18-точечных примеров изображения внутренняя точка слева и справа может быть растянута, чтобы соответствовать треку, но на концах должны быть нерастяжимые размеры шайб 17 точек (следовательно, capInsets):
sliderMinTrackImage = [sliderMinTrackImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 17, 0, 0)];
sliderMaxTrackImage = [sliderMaxTrackImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 17)];
Затем установите изображения на свой UISlider, как всегда:
[slider setThumbImage:thumbImage forState:UIControlStateNormal];
[slider setMinimumTrackImage:sliderMinTrackImage forState:UIControlStateNormal];
[slider setMaximumTrackImage:sliderMaxTrackImage forState:UIControlStateNormal];
Ответ 5
![введите описание изображения здесь]()
Вот способ добавления изображения трека, которое не растягивается, так что вы можете иметь, например, клиновая форма на заднем плане, как и ОП:
Swift 3.0:
let trackImg = image.resizableImage(withCapInsets: .zero, resizingMode: .tile)
slider.setMinimumTrackImage(trackImg, for: .normal)
slider.setMaximumTrackImage(trackImg, for: .normal)
Важно: убедитесь, что ширина слайдера точно такая же, как ширина изображения!
Ответ 6
Вам нужно подкласс UISlider и переопределить:
- (CGRect)trackRectForBounds:(CGRect)bounds
Обсуждение Вы не должны называть это метод напрямую. Если ты хочешь настройте прямоугольник дорожки, вы можете переопределить этот метод и вернуть другой прямоугольник. Возвращенный прямоугольник используется для масштабирования дорожки и изображения большого пальца во время рисования.
Ответ 7
Я делаю это, но задняя панель отлично не отображается в iOS 5.1, но в iOS 6.0 отображается ее
вот мой код
UIImage *stetchLeftTrack = [[UIImage imageNamed:@"spectrum_horizontal_bar.png"]
stretchableImageWithLeftCapWidth:15.0 topCapHeight:0.0];
UIImage *stetchRightTrack = [[UIImage imageNamed:@"spectrum_horizontal_bar.png"]
stretchableImageWithLeftCapWidth:15.0 topCapHeight:0.0];
[self.slider_Sprectrum setMinimumTrackImage:stetchLeftTrack forState:UIControlStateNormal];
[self.slider_Sprectrum setMaximumTrackImage:stetchRightTrack forState:UIControlStateNormal];