我正在尝试为我的应用程序创建一个类似于下图所示的 slider 。我尝试在界面生成器中进行操作,但没有成功。默认 slider 始终从左侧突出显示。如何实现?
最佳答案
UISlider
没有对您想要执行的操作的内置支持。最好编写您自己的 UIControl
或 UIView
子类,而不是尝试自定义 UISlider
。
但是,如果您真的想自定义一个 UISlider
,那么您需要了解以下内容。
UISlider
有三个私有(private)的 UIImageView
subview :一个用于拇指,一个用于拇指左侧的轨道,一个用于右侧的轨道大拇指。当您拖动 slider 或以编程方式更改 slider 值时, slider 会自行发送 layoutSubviews
。在其 layoutSubviews
方法中,它更改三个 ImageView 的帧以匹配新的 slider 值。
您不应该弄乱 UISlider
的私有(private) subview 。它们可能会在未来的 iOS 版本中发生变化。相反,您想要有效地禁用轨道图像 subview 以便您可以绘制自己的轨道,并单独保留缩略图图像 subview 以便 UISlider
将负责显示缩略图。
您需要子类化 UISlider
。在您的子类中,您需要做几件事:
您需要将
minimumValueImage
和maximumValueImage
属性设置为透明的UIImage
。这将有效地禁用绘制普通的两部分轨道的私有(private)UISlider
subview 。您需要为自己指定三个新的
UIImage
属性:leftEndImage
、rightEndImage
和filledImage
。您将使用它们来填充轨道的三个不同部分。您需要给自己三个
UIImageView
subview - 一个用于轨道的三个部分。您需要覆盖
layoutSubviews
。在您的方法中,您需要调用[super layoutSubviews]
,然后设置三个图像 subview 的框架以匹配 slider 的当前值。
如果您是 iOS 编程的新手,这可能有点复杂。祝你好运。
更新
实际上,我想到您可以将 minimumValueImage
设置为默认 maximumValueImage
图像的左右镜像,这样 UISlider
将绘制三部分轨道的两个白色端。然后你只需要添加一个你自己的 UIImageView
subview 来绘制轨道的蓝色部分。
无论您如何操作,如果您将 UISlider
子类化并插入 subview ,您将依赖于 UISlider
的实现,而不会发生太大变化。例如,如果 UISlider
的 future 版本直接在 drawRect:
中绘制轨迹和 slider ,而不是使用 subview ,那么您的子类肯定会看起来不对。
关于iphone - iOS UISlider 自定义。从中心显示突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9090341/