iphone - iOS UISlider 自定义。从中心显示突出显示

标签 iphone ios ipad uislider

我正在尝试为我的应用程序创建一个类似于下图所示的 slider 。我尝试在界面生成器中进行操作,但没有成功。默认 slider 始终从左侧突出显示。如何实现?

enter image description here

最佳答案

UISlider 没有对您想要执行的操作的内置支持。最好编写您自己的 UIControlUIView 子类,而不是尝试自定义 UISlider

但是,如果您真的想自定义一个 UISlider,那么您需要了解以下内容。

UISlider 有三个私有(private)的 UIImageView subview :一个用于拇指,一个用于拇指左侧的轨道,一个用于右侧的轨道大拇指。当您拖动 slider 或以编程方式更改 slider 值时, slider 会自行发送 layoutSubviews。在其 layoutSubviews 方法中,它更改三个 ImageView 的帧以匹配新的 slider 值。

您不应该弄乱 UISlider 的私有(private) subview 。它们可能会在未来的 iOS 版本中发生变化。相反,您想要有效地禁用轨道图像 subview 以便您可以绘制自己的轨道,并单独保留缩略图图像 subview 以便 UISlider 将负责显示缩略图。

您需要子类化 UISlider。在您的子类中,您需要做几件事:

  • 您需要将 minimumValueImagemaximumValueImage 属性设置为透明的 UIImage。这将有效地禁用绘制普通的两部分轨道的私有(private) UISlider subview 。

  • 您需要为自己指定三个新的 UIImage 属性:leftEndImagerightEndImagefilledImage。您将使用它们来填充轨道的三个不同部分。

  • 您需要给自己三个 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/

相关文章:

iphone - NSIncation 将 C 数组传递给 Objective-C 方法

ios - 如何在iphone单独安装的应用程序中打开ppt、excel等文件?

javascript - 我如何知道设备屏幕有多少物理英寸?

iphone - 在 iPhone 应用程序中播放视频库中的视频

ios - 应用程序未覆盖 iPad 上的整个屏幕

html - 为什么此链接在 iPhone 上不起作用?

iphone - 解锁 iPhone 后应用程序必须在后台处于事件状态

ios - MKLocalSearch 提供的结果与原生 Apple map 应用程序中的搜索结果不同

ios - 确定系统警报时点击了哪个按钮

jquery - 使用jquery在iPad上触发触摸事件的正确方法是什么