UISlider: изменена высота, но мигает максимальное значение - PullRequest
0 голосов
/ 12 ноября 2018

Я настроил UISlider, и все работает хорошо, за исключением случаев, когда я перетаскиваю ползунок на 100%. Затем закругленные колпачки заменяются квадратными.

Вот как я могу настроить слайдер:

@IBInspectable var trackHeight: CGFloat = 14

override func trackRect(forBounds bounds: CGRect) -> CGRect {
    return CGRect(origin: bounds.origin, size: CGSize(width: bounds.width, height: trackHeight))
}

98% изображения:

enter image description here

100% изображения:

enter image description here

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Оригинальный ответ здесь: Изображение большого пальца не перемещается к краю UISlider

обновлен до Swift 4.2:

override func thumbRect(forBounds bounds: CGRect, trackRect rect: CGRect, value: Float) -> CGRect {
    let unadjustedThumbrect = super.thumbRect(forBounds: bounds, trackRect: rect, value: value)
    let thumbOffsetToApplyOnEachSide:CGFloat = unadjustedThumbrect.size.width / 2.0
    let minOffsetToAdd = -thumbOffsetToApplyOnEachSide
    let maxOffsetToAdd = thumbOffsetToApplyOnEachSide
    let offsetForValue = minOffsetToAdd + (maxOffsetToAdd - minOffsetToAdd) * CGFloat(value / (self.maximumValue - self.minimumValue))
    var origin = unadjustedThumbrect.origin
    origin.x += offsetForValue
    return CGRect(origin: origin, size: unadjustedThumbrect.size)
}
0 голосов
/ 19 марта 2019

Вы можете удалить фон дорожки, установив minimumTrackTintColor и maximumTrackTintColor в UIColor.clear и нарисовать фон дорожки самостоятельно.

Например:

class CustomSlider: UISlider {

    override func trackRect(forBounds bounds: CGRect) -> CGRect {
        return bounds
    }

    override func draw(_ rect: CGRect) {
        guard let context = UIGraphicsGetCurrentContext() else {
            return
        }

        context.setFillColor(UIColor.green.cgColor)
        let path = UIBezierPath(roundedRect: rect, cornerRadius: rect.size.height / 2).cgPath
        context.addPath(path)
        context.fillPath()
    }

}
0 голосов
/ 12 ноября 2018

Вот несколько быстрых решений

Вы изменили рамку линии, высота выше, чем по умолчанию, и поэтому вы ее видите.

Вы можете передвинуть ползунок немного на 100%.

override func thumbRect(forBounds bounds: CGRect, trackRect rect: CGRect, value: Float) -> CGRect {
    var rect = super.thumbRect(forBounds: bounds, trackRect: rect, value: value)
    if value > 0.99 {
        rect = CGRect(x: rect.origin.x+2, y: rect.origin.y, width: rect.size.width, height: rect.size.height)
    }
    return rect
}

Или вы можете увеличить большой палец, чтобы покрыть углы, решать только вам.

...