Ответ 1
Вам нужно подклассифицировать слайдер и переопределить метод trackRectForBounds:
, например:
- (CGRect)trackRectForBounds:(CGRect)bounds
{
return bounds;
}
Я настраиваю UISlider
. Я мог установить пользовательское изображение большого пальца, которое выше, чем обычный большой палец, однако я не мог сделать дорожку выше при установке более высокого минимального изображения дорожки, но высота дорожки осталась прежней.
Это должно быть возможно, так как в приложении iPod/Music на iPad ползунок громкости также выше, чем обычный ползунок, как вы можете видеть здесь:
(источник: cocoia.com)
Вам нужно подклассифицировать слайдер и переопределить метод trackRectForBounds:
, например:
- (CGRect)trackRectForBounds:(CGRect)bounds
{
return bounds;
}
Простейшее решение для Swift:
class TBSlider: UISlider {
override func trackRectForBounds(bounds: CGRect) -> CGRect {
return CGRectMake(0, 0, bounds.size.width, 4)
}
}
Для тех, кто хотел бы увидеть некоторый рабочий код для изменения размера дорожки.
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()
}
}
Осталось только изменить класс внутри раскадровки:
Вы можете продолжать использовать свое действие и выход для поиска по типу объекта UISlider, если вы не хотите добавить к своему слайдеру еще несколько пользовательских материалов.
использовать следующие методы 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;
}
//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];