滑块 - 开头和结尾的颜色不正确

问题描述

我有一个自定义滑块,我必须在其中增加滑块的高度(厚度)。代码如下所示:

class CustomSlider: UiSlider
{   
    override open func trackRect(forBounds bounds: CGRect) -> CGRect {
        var defaultBounds = super.trackRect(forBounds: bounds)
        let newHeight: CGFloat = 20
        
        return CGRect(x: defaultBounds.origin.x,y: defaultBounds.origin.y + defaultBounds.size.height/2 - newHeight/2,width: defaultBounds.size.width,height: newHeight)
    }
}

高度增加了,但现在的问题是滑块在开始和结束时没有正确着色。例如,一开始它现在看起来像这样: wrong color at the beginning

在某个时间点后颜色变得正确并填充蓝色:correct color after some point

最后还是出现了同样的问题,起初一切都按预期进行:normal behavior

但是在某个时间点之后颜色会很快更新为蓝色:wrong color in the end

有没有人遇到过类似的事情?有什么解决办法吗?

我曾尝试使用 setMinimumTrackImagesetMaximumTrackImage 而不是 minimumTrackTintColormaximumTrackTintColor,它可以工作,但我无法使用它,因为当我旋转屏幕时 - 滑块会拉伸并且我正在使用的图像也进行了拉伸,因此滑块的角半径看起来被拉伸了,与实际情况不同。

还有一个有趣的事实是,我增加滑块的高度越多 - 开始时出现正确颜色的时间就越晚。

解决方法

由于设置轨道图像有效,唯一的问题是角落被拉伸,后者可以通过在轨道图像上使用 resizableImage(withCapInsets:) 来解决,因此只有图像的中间部分会被拉伸,其余部分将保留原封不动。

这些文章详细介绍了该主题:

https://www.natashatherobot.com/ios-stretchable-button-uiedgeinsetsmake/

https://www.hackingwithswift.com/example-code/media/how-to-make-resizable-images-using-resizableimagewithcapinsets