在 swift 中将两个 UISlider 设置为永不低于彼此
Set two UISliders to never go below each other in swift
我想要一个两个拇指的滑块,但经过无数努力却无法弄清楚该怎么做!所以我决定使用两个滑块作为厚脸皮 UI 并且它有效。但是现在我需要设置它,使两个滑块之间的距离为 4,即。当两个滑块彼此相邻时,它们不能接近 4 个值。所以当 min 为 10 时,max 只能低至 14。
我该怎么做呢?我从另一个 SO 问题中尝试了下面的代码,但它不起作用。
我试过下面的代码,但它把它们都设置为零,而且它们很奇怪而且有问题。当移动一个时,它会将另一个设置为零,否则最大值不会达到 55,而是 24。
var slider1:Float = 0.0
var slider2:Float = 0.0
func configureDefaultMaxAgeSlider() {
maxAgeSlider.minimumValue = 10
maxAgeSlider.maximumValue = (55 - slider1)
// maxAgeSlider.value = 0
maxAgeSlider.continuous = true
}
func configureDefaultAgeSlider() {
ageSlider.minimumValue = 10
ageSlider.maximumValue = (55 - slider2)
// ageSlider.value = 0
ageSlider.continuous = true
}
@IBOutlet weak var maxAgeLabel: UILabel!
@IBOutlet weak var ageSlider: UISlider!
@IBOutlet weak var maxAgeSlider: UISlider!
@IBAction func ageSliderValueChanged(sender: UISlider) {
let minAgeValue = Int(sender.value)
ageLabel.text = "\(minAgeValue)"
minAgeSearch = "\(minAgeValue)"
slider1 = (sender.value)
configureDefaultMaxAgeSlider()
}
@IBAction func maxAgeSliderValueChanged(sender: UISlider) {
let maxAgeValue = Int(sender.value)
maxAgeLabel.text = "\(maxAgeValue)"
maxAgeSearch = "\(maxAgeValue)"
slider1 = (sender.value)
configureDefaultAgeSlider()
}
我在objc里找到了,但是不知道怎么转换。 SO objc answer
编辑
我几乎有了它工作的概念有谁知道我做错了什么吗???
@IBAction func ageSliderValueChanged(sender: UISlider) {
let minAgeValue = Int(sender.value)
ageLabel.text = "\(minAgeValue)"
minAgeSearch = "\(minAgeValue)"
if ageSlider.value > maxAgeSlider.value {
maxAgeSlider.value = ageSlider.value
}
minAgeUserDefaults.setObject(minAgeSearch, forKey: "name")
}
@IBAction func maxAgeSliderValueChanged(sender: UISlider) {
let maxAgeValue = Int(sender.value)
maxAgeLabel.text = "\(maxAgeValue)"
maxAgeSearch = "\(maxAgeValue)"
if maxAgeSlider.value < ageSlider.value {
maxAgeSlider.value = ageSlider.value
}
maxAgeUserDefaults.setObject(maxAgeSearch, forKey: "age")
}
ageSlider.continuous = true
maxAgeSlider.continuous = true
我解决了这个问题,如果最大年龄滑块低于最小年龄滑块,它会在幕后反转结果。它的功能,但是它绝对不是最好的 UI 明智的,因为它显示最大和最小年龄,例如,如果最小设置为 35 最大年龄设置为 28,它会这样显示,但它会 return 请求时结果正确,这是我需要的主要内容。这是我使用的代码:
if maxAge < minAge {
maxAge = minAgeSearch
minAge = maxAgeSearch
}
我想要一个两个拇指的滑块,但经过无数努力却无法弄清楚该怎么做!所以我决定使用两个滑块作为厚脸皮 UI 并且它有效。但是现在我需要设置它,使两个滑块之间的距离为 4,即。当两个滑块彼此相邻时,它们不能接近 4 个值。所以当 min 为 10 时,max 只能低至 14。 我该怎么做呢?我从另一个 SO 问题中尝试了下面的代码,但它不起作用。
我试过下面的代码,但它把它们都设置为零,而且它们很奇怪而且有问题。当移动一个时,它会将另一个设置为零,否则最大值不会达到 55,而是 24。
var slider1:Float = 0.0
var slider2:Float = 0.0
func configureDefaultMaxAgeSlider() {
maxAgeSlider.minimumValue = 10
maxAgeSlider.maximumValue = (55 - slider1)
// maxAgeSlider.value = 0
maxAgeSlider.continuous = true
}
func configureDefaultAgeSlider() {
ageSlider.minimumValue = 10
ageSlider.maximumValue = (55 - slider2)
// ageSlider.value = 0
ageSlider.continuous = true
}
@IBOutlet weak var maxAgeLabel: UILabel!
@IBOutlet weak var ageSlider: UISlider!
@IBOutlet weak var maxAgeSlider: UISlider!
@IBAction func ageSliderValueChanged(sender: UISlider) {
let minAgeValue = Int(sender.value)
ageLabel.text = "\(minAgeValue)"
minAgeSearch = "\(minAgeValue)"
slider1 = (sender.value)
configureDefaultMaxAgeSlider()
}
@IBAction func maxAgeSliderValueChanged(sender: UISlider) {
let maxAgeValue = Int(sender.value)
maxAgeLabel.text = "\(maxAgeValue)"
maxAgeSearch = "\(maxAgeValue)"
slider1 = (sender.value)
configureDefaultAgeSlider()
}
我在objc里找到了,但是不知道怎么转换。 SO objc answer
编辑
我几乎有了它工作的概念有谁知道我做错了什么吗???
@IBAction func ageSliderValueChanged(sender: UISlider) {
let minAgeValue = Int(sender.value)
ageLabel.text = "\(minAgeValue)"
minAgeSearch = "\(minAgeValue)"
if ageSlider.value > maxAgeSlider.value {
maxAgeSlider.value = ageSlider.value
}
minAgeUserDefaults.setObject(minAgeSearch, forKey: "name")
}
@IBAction func maxAgeSliderValueChanged(sender: UISlider) {
let maxAgeValue = Int(sender.value)
maxAgeLabel.text = "\(maxAgeValue)"
maxAgeSearch = "\(maxAgeValue)"
if maxAgeSlider.value < ageSlider.value {
maxAgeSlider.value = ageSlider.value
}
maxAgeUserDefaults.setObject(maxAgeSearch, forKey: "age")
}
ageSlider.continuous = true
maxAgeSlider.continuous = true
我解决了这个问题,如果最大年龄滑块低于最小年龄滑块,它会在幕后反转结果。它的功能,但是它绝对不是最好的 UI 明智的,因为它显示最大和最小年龄,例如,如果最小设置为 35 最大年龄设置为 28,它会这样显示,但它会 return 请求时结果正确,这是我需要的主要内容。这是我使用的代码:
if maxAge < minAge {
maxAge = minAgeSearch
minAge = maxAgeSearch
}