Подтвердить что ты не робот

Изменить изображение iPhone UISlider iPhone

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

Я нашел, как изменить максимальное и минимальное изображение, но не панель.

4b9b3361

Ответ 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, что-то вроде этого: min track и это: enter image description here.

Создайте изображения как обычно:

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];