iOS UISlider自定义.从中心显示突出显示

Bij*_*raj 3 iphone uislider ipad ios

我正在尝试为我的应用创建一个类似于下面所示的滑块.我尝试在界面构建器中执行此操作但没有运气.默认滑块始终显示左侧的突出显示.怎么能实现这一目标?

在此输入图像描述

rob*_*off 8

UISlider没有内置支持您想要做的事情.这也可能是最好写你自己的子类UIControlUIView而不是试图定制UISlider.

但如果你真的想定制一个UISlider,这就是你需要知道的.

A UISlider有三个私人UIImageView子视图:一个用于拇指,一个用于拇指左侧的轨道,一个用于拇指右侧的轨道.当您以编程方式拖动滑块或更改滑块值时,滑块会自行发送layoutSubviews.在其layoutSubviews方法中,它更改三个图像视图的帧以匹配新的滑块值.

你不应该搞乱UISlider私人子视图.它们可能会在iOS的未来版本中发生变化.相反,您希望有效地禁用轨迹图像子视图,以便您可以绘制自己的轨迹,并单独保留拇指图像子视图,以便UISlider显示拇指.

你需要子类UISlider.在你的子类中,你需要做几件事:

  • 你需要设置你minimumValueImagemaximumValueImage属性透明UIImage.这将有效地禁用UISlider绘制正常的两部分轨道的私有子视图.

  • 你需要给自己三个新UIImage属性:leftEndImage,rightEndImage,和filledImage.您将使用它们来填充轨道的三个不同部分.

  • 你需要给自己三个UIImageView子视图 - 一个用于轨道的三个部分.

  • 你需要覆盖layoutSubviews.在您的方法中,您需要调用[super layoutSubviews],然后设置三个图像子视图的帧以匹配滑块的当前值.

如果您是iOS编程新手,可能会有点复杂.祝好运.

UPDATE

实际上,我可以设置minimumValueImage为默认maximumValueImage图像的左右镜像,这样就UISlider可以绘制三部分轨道的两个白色端部.然后你只需添加一个UIImageView自己的子视图来绘制轨道的蓝色部分.

无论如何,如果你子类化UISlider并插入子视图,你依赖于UISlider实现不会改变太多.例如,如果未来版本UISlider直接绘制轨道和拇指drawRect:而不是使用子视图,则子类肯定会出错.