Я искал способ сделать уровень выполнения UISlider
выше, т.е. увеличить высоту. Однако у меня не было никакого успеха. Я не хочу использовать пользовательский образ или что-то еще, просто сделайте его более высоким, поэтому UISlider
выглядит не так тонко. Я пропустил что-то супер очевидное?
Увеличьте высоту UISlider?
Ответ 1
Я нашел то, что искал. Следующий метод просто нужно отредактировать в подклассе.
- (CGRect)trackRectForBounds:(CGRect)bounds{
CGRect customBounds = ...
return customBounds;
}
Ответ 2
Принятый ответ будет нежелательно менять ширину ползунка в некоторых случаях, например, если вы используете minimumValueImage
и maximumValueImage
. Если вы хотите изменить высоту и оставить все остальное в одиночестве, используйте этот код:
override func trackRect(forBounds bounds: CGRect) -> CGRect {
var newBounds = super.trackRect(forBounds: bounds)
newBounds.size.height = 12
return newBounds
}
Ответ 3
Для тех, кто хотел бы увидеть некоторый рабочий код для изменения размера дорожки.
class CustomUISlider : UISlider {
override func trackRect(forBounds 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.trackRect(forBounds: 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"), for: .normal)
super.awakeFromNib()
}
}
Осталось только изменить класс внутри раскадровки:
Вы можете продолжать использовать свое действие и выход для поиска по типу объекта UISlider, если вы не хотите добавить к своему слайдеру еще несколько пользовательских материалов.
Ответ 4
Вот моя недавняя свежая реализация, основанная на CularBytes...
open class CustomSlider : UISlider {
@IBInspectable open var trackWidth:CGFloat = 2 {
didSet {setNeedsDisplay()}
}
override open func trackRect(forBounds bounds: CGRect) -> CGRect {
let defaultBounds = super.trackRect(forBounds: bounds)
return CGRect(
x: defaultBounds.origin.x,
y: defaultBounds.origin.y + defaultBounds.size.height/2 - trackWidth/2,
width: defaultBounds.size.width,
height: trackWidth
)
}
}
Используйте это в UISlider в раскадровке, установив свой собственный класс
Ответ 5
Вы можете играть с этим, посмотреть, что произойдет:
slider.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 2.0);