代码之家  ›  专栏  ›  技术社区  ›  netshark1000

uislider:更改了hight,但最大值闪烁

  •  1
  • netshark1000  · 技术社区  · 6 年前

    我定制了一个 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

    2 回复  |  直到 6 年前
        1
  •  0
  •   Quang Tran    6 年前

    您可以按集合移除轨迹背景 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()
        }
    
    }
    
        2
  •  0
  •   Gkolunia    6 年前

    这里有一些快速的解决方案

    您已经更改了线的边框,高度比默认值高,这就是您看到它的原因。

    你可以在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
    }
    

    或者你可以把大拇指弄大来盖住角落,这取决于你自己。

        3
  •  0
  •   Arie Pinto    6 年前

    原始答案如下: Thumb image does not move to the edge of 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)
    }