问题描述
我有一个自定义滑块,我必须在其中增加滑块的高度(厚度)。代码如下所示:
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
有没有人遇到过类似的事情?有什么解决办法吗?
我曾尝试使用 setMinimumTrackImage
和 setMaximumTrackImage
而不是 minimumTrackTintColor
和 maximumTrackTintColor
,它可以工作,但我无法使用它,因为当我旋转屏幕时 - 滑块会拉伸并且我正在使用的图像也进行了拉伸,因此滑块的角半径看起来被拉伸了,与实际情况不同。
还有一个有趣的事实是,我增加滑块的高度越多 - 开始时出现正确颜色的时间就越晚。
解决方法
由于设置轨道图像有效,唯一的问题是角落被拉伸,后者可以通过在轨道图像上使用 resizableImage(withCapInsets:)
来解决,因此只有图像的中间部分会被拉伸,其余部分将保留原封不动。
这些文章详细介绍了该主题:
https://www.natashatherobot.com/ios-stretchable-button-uiedgeinsetsmake/