iOS Swift - UISlider - 添加第二个轨迹栏

Posted

技术标签:

【中文标题】iOS Swift - UISlider - 添加第二个轨迹栏【英文标题】:iOS Swift - UISlider - Add a second track bar 【发布时间】:2021-06-19 17:12:06 【问题描述】:

我正在尝试自定义我的子类 UISlider 以在可拖动拇指下方添加第二个轨迹栏。这里的想法是让这个新轨道代表“平均评级”,用户使用现有的拇指和轨道来设置他们自己的评级。我尝试插入一个自定义层,但它要么位于整个滑块的后面,要么位于整个滑块的顶部,包括可拖动的拇指。任何有关此事的帮助/见解将不胜感激。提前致谢。

这是我想要实现的目标的图像。蓝条我想成为这个添加的轨道,代表“平均评分”:

【问题讨论】:

从头开始构建自己的 UIControl,而不是使用 UISlider。 【参考方案1】:

不要调用addSublayer(),而是尝试使用insertSublayer(_: at:)。这将使您可以完全控制要在层层次结构中插入average rating layer 实例的确切位置。


更新

尝试检查self.layer.sublayersUISlider 实例。如果您可以轻松识别thumbLayer(比如基于bounds.size 或任何独特的东西)。然后你可以尝试插入你的图层

    在拇指下方使用insertSublayer(_: below:) 使用insertSublayer(_: above:)在进度轨道上方(以防你能识别它)

【讨论】:

我实际上正在使用 insertSublayer(检查后)。如果我在 0 处插入,它将把它放在整个滑块的后面,如果我在 1 处插入,它把它放在整个滑块的前面(包括跟踪拇指)。我认为这是因为整个 UISlider 被表示为单层 查看更新以了解另一种可能的解决方法。 也检查过了 - 我只看到一个子层:/ 如果你在View Hierarchy Debugger 中检查这个,UISlider 有多少个子视图?

以上是关于iOS Swift - UISlider - 添加第二个轨迹栏的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中为 UISlider 的值添加百分号

当我改变它的框架时,UISlider 没有改变它的宽度 - ios Swift

Swift 检测 UISlider 图像点击

每次移动 UISlider 时删除注释 - mapView, Swift

UISlider 在 ios 中无法使用特定语言

IOS - 当滑块值改变时设置 UILabel Swift