Настройте UISlider (высота изображения трека) - PullRequest
11 голосов
/ 05 ноября 2011

Я настраиваю UISlider. Я мог установить пользовательское изображение большого пальца, которое выше, чем обычный большой палец, однако я не мог сделать дорожку выше при установке более высокого минимального изображения дорожки, но высота дорожки осталась прежней. Это должно быть возможно, поскольку в приложении iPod / Music на iPad ползунок громкости также выше обычного, как вы можете видеть здесь:

http://blog.cocoia.com/wp-content/uploads/2010/01/Lol-wut.png

Ответы [ 5 ]

24 голосов
/ 16 февраля 2012

Вам необходимо создать подкласс ползунка и переопределить метод trackRectForBounds:, например:

- (CGRect)trackRectForBounds:(CGRect)bounds
{
    return bounds;
}
6 голосов
/ 07 января 2016

Самое простое решение для Swift:

class TBSlider: UISlider {

    override func trackRectForBounds(bounds: CGRect) -> CGRect {
        return CGRectMake(0, 0, bounds.size.width, 4)
    }
}
3 голосов
/ 15 июля 2015

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

class CustomUISlider : UISlider
{        
    override func trackRectForBounds(bounds: CGRect) -> CGRect {
        //keeps original origin and width, changes height, you get the idea
        let customBounds = CGRect(origin: bounds.origin, size: CGSize(width: bounds.size.width, height: 5.0))
        super.trackRectForBounds(customBounds)
        return customBounds
    }

    //while we are here, why not change the image here as well? (bonus material)
    override func awakeFromNib() {
        self.setThumbImage(UIImage(named: "customThumb"), forState: .Normal)
        super.awakeFromNib()
    }
}

Осталось только изменить класс внутри раскадровки:

storyboardstuff

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

2 голосов
/ 05 ноября 2011

используйте следующие методы setThumbImage , setMinimumTrackImage , setMaximumTrackImage

[self setThumbImage:[UIImage imageNamed:@"switchThumb.png"] forState:UIControlStateNormal];
    [self setMinimumTrackImage:[UIImage imageNamed:@"switchBlueBg.png"] forState:UIControlStateNormal];
    [self setMaximumTrackImage:[UIImage imageNamed:@"switchOffPlain.png"] forState:UIControlStateNormal];

и создайте подобный подкласс

- (id) initWithFrame: (CGRect)rect{
    if ((self=[super initWithFrame:CGRectMake(rect.origin.x,rect.origin.y,90,27)])){
        [self awakeFromNib];
    }
    return self;
}
1 голос
/ 03 сентября 2012
//use this code

 UIImage *volumeLeftTrackImage = [[UIImage imageNamed: @"video_payer_scroll_selection.png"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
        UIImage *volumeRightTrackImage= [[UIImage imageNamed: @"video_bar_bg.png"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
        [volumeslider setMinimumTrackImage: volumeLeftTrackImage  forState: UIControlStateNormal];
        [volumeslider setMaximumTrackImage: volumeRightTrackImage  forState: UIControlStateNormal];
        [volumeslider setThumbImage:[UIImage imageNamed:@"sound_bar_btn.png"] forState:UIControlStateNormal];
        [tempview addSubview:volumeslider];
...