ios - 如何使用步进滑块在滑块拇指上添加 UILabel?
问题描述
我有一个有 5 个部分的滑块,我想为这些部分跨过!我这样做了:
@IBAction func changeCostSlider(_ sender: UISlider) {
sender.value = roundf(costSlider.value)
}
我还想在滑块的拇指上添加一个标签,我尝试将此代码添加到上面的代码中:
let trackRect: CGRect = costSlider.trackRect(forBounds: costSlider.bounds)
let thumbRect: CGRect = costSlider.thumbRect(forBounds: costSlider.bounds , trackRect: trackRect, value: costSlider.value)
let x = thumbRect.origin.x + costSlider.frame.origin.x
let y = costSlider.frame.origin.y - 20
sliderLabel.center = CGPoint(x: x, y: y)
但是当我移动滑块时,我的标签会从我在情节提要中放置标签的位置跳出来,并且有一些滞后!有人对如何将此标签添加到我的步进滑块并正常工作有任何建议吗?!
我认为我的问题是我将我的 UILable 固定在 storyborad 中,当我在滑块中移动拇指时,一毫秒,它又回到了固定的位置!我该如何解决?!
我尝试以编程方式添加我的 UILabel,但在我触摸拇指之前它不起作用!它是如何完成的:
var sliderLableP = UILabel()
@IBAction func changeCostSlider(_ sender: UISlider) {
sender.value = roundf(costSlider.value)
print(costSlider.value)
let trackRect: CGRect = costSlider.trackRect(forBounds: costSlider.bounds)
let thumbRect: CGRect = costSlider.thumbRect(forBounds: costSlider.bounds , trackRect: trackRect, value: costSlider.value)
let x = thumbRect.origin.x + costSlider.frame.origin.x
let y = costSlider.frame.origin.y - 20
sliderLableP.center = CGPoint(x: x, y: y)
}
在我的 viewDidLoad 中,我添加了这个:
sliderLableP = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 20))
let trackRect: CGRect = costSlider.trackRect(forBounds: costSlider.bounds)
let thumbRect: CGRect = costSlider.thumbRect(forBounds: costSlider.bounds , trackRect: trackRect, value: costSlider.value)
let x = thumbRect.origin.x + costSlider.frame.origin.x
let y = costSlider.frame.origin.y - 20
sliderLableP.center = CGPoint(x: x, y: y)
sliderLableP.textAlignment = NSTextAlignment.center
sliderLableP.textColor = UIColor.blue
self.containerView.addSubview(sliderLableP)
containerView.bringSubview(toFront: sliderLableP)
解决方案
这个解决方案对我有用:
@IBAction func changeCostSlider(_ sender: UISlider) {
sender.value = roundf(sender.value)
let trackRect = sender.trackRect(forBounds: sender.frame)
let thumbRect = sender.thumbRect(forBounds: sender.bounds, trackRect: trackRect, value: sender.value)
self.sliderLabel.center = CGPoint(x: thumbRect.midX, y: self.sliderLabel.center.y)
}
推荐阅读
- python - 给定一个图,我怎样才能得出节点的位置,以便图中的派系接近?
- python - 如何循环滚动/移动熊猫系列
- ios - Cordova iOS app icon always shows default icon on iPad OS 13.7
- java - Thread in stream vs Parallel Stream
- javascript - How to import repeated function in React
- javascript - Vue页面在加载时不会向下滚动
- wpf - WPF Datagrid - DataGridTextColumn ObservableCollection1 错误
- react-native - Unable to store Json RPC response in react native but able to console.log it
- json - x 轴高图上的日期格式
- powerbi - 用于可视化折线图的 Power BI 数据转换