我想在 UISlider
的拇指上放置一个 UILabel
。
我的代码基于此:Another SO question
问题在于,使用该代码,在更改值之前拇指上没有文本。所以我做了一些修改。我将标签设为全局变量,并在 viewDidLoad()
中对其进行配置。然后我只在 slider 更改值时更改文本。
实际问题是这样的(viewDidLoad()
中的代码):
let thumbView = mySlider.subviews.last
label.frame = (thumbView?.bounds)!
mySlider
的 subviews
数组为空。因此它会造成崩溃,因为我打开了一个 nil 值。
我不明白为什么会发生这种情况,因为 View 已完全初始化。
为什么 mySlider.subviews
是空的?我错过了什么?有谁知道我该如何解决这个问题?有没有其他方法可以将标签放在拇指中间?
最佳答案
mySlider.subviews.last
不是获取 thumbImage 中心的可靠方法。文档中的任何地方都没有提到它。我个人认为以这种方式来做是很老套的。
但是,要获得 slider
的中心,您可以根据 slider
的 value
使用 的组合进行计算trackRectForBounds
和 thumbRectForBounds
。
这应该适合你:
@IBAction func sliderValueChanged(slider: UISlider) {
let trackRect = slider.trackRectForBounds(slider.bounds)
let thumbRect = slider.thumbRectForBounds(slider.bounds, trackRect: trackRect, value: slider.value)
sliderLabel.center = CGPointMake(thumbRect.origin.x + thumbRect.size.width / 2 + slider.frame.origin.x, slider.frame.origin.y + thumbRect.size.height / 2)
}
基本上,它所做的是首先计算轨道的矩形,然后使用它来计算 thumbRect。最后设置中心,同时考虑 slider 的宽度和高度以及拇指大小。
请记住将您的 label
文本对齐设置为居中。
关于swift - UISlider 在 ViewDidLoad() 中没有 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38412877/