单个 Slider 的 Swiftui 多重绑定
Posted
技术标签:
【中文标题】单个 Slider 的 Swiftui 多重绑定【英文标题】:Swiftui multiple binding for a single Slider 【发布时间】:2021-11-10 19:34:33 【问题描述】:如何将多个变量绑定到单个 Slider 是 SwiftUI?
我想要 1 个滑块来更改 2 个变量,一个在 1 到 5 的范围内,另一个在 1000 到 1200 的范围内。或者有任何解决方法吗?
所以当变量 1 = 1 时,变量 2 应该是 1000,而当变量 1 = 5 时,变量 2 应该是 1200,介于两者之间。 谢谢(我是编程新手)
struct ContentView: View
@State private var variable1 = 1.0
@State private var variable2 = 1000.0
var body: some View
VStack
Slider(value: $variable1, in: 1...5, step: 0.25)
【问题讨论】:
【参考方案1】:一种解决方案是使用计算属性,而不是使用第二个 @State
变量:
struct ContentView: View
@State private var variable1 = 1.0
private var variable1Range = 1.0...5.0
private var variable2Range = 1000.0...1200.0
var variable2 : Double
floatingMap(minRange: variable1Range.lowerBound, maxRange: variable1Range.upperBound, minDomain: variable2Range.lowerBound, maxDomain: variable2Range.upperBound, value: variable1)
var body: some View
VStack
Text("Variable 1: \(variable1)")
Text("Variable 2: \(variable2)")
Slider(value: $variable1, in: variable1Range, step: 0.25)
func floatingMap<T:FloatingPoint>(minRange:T, maxRange:T, minDomain:T, maxDomain:T, value:T) -> T
return minDomain + (maxDomain - minDomain) * (value - minRange) / (maxRange - minRange)
如果您确实需要两个@State
变量,您可以使用onChange
观察variable1
并根据其值在variable2
上分配一个新值:
struct ContentView: View
@State private var variable1 = 1.0
@State private var variable2 = 1000.0
private var variable1Range = 1.0...5.0
private var variable2Range = 1000.0...1200.0
var body: some View
VStack
Text("Variable 1: \(variable1)")
Text("Variable 2: \(variable2)")
Slider(value: $variable1, in: variable1Range, step: 0.25)
.onChange(of: variable1) variable1 in
variable2 = floatingMap(minRange: variable1Range.lowerBound, maxRange: variable1Range.upperBound, minDomain: variable2Range.lowerBound, maxDomain: variable2Range.upperBound, value: variable1)
func floatingMap<T:FloatingPoint>(minRange:T, maxRange:T, minDomain:T, maxDomain:T, value:T) -> T
return minDomain + (maxDomain - minDomain) * (value - minRange) / (maxRange - minRange)
【讨论】:
谢谢,这很好。以上是关于单个 Slider 的 Swiftui 多重绑定的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI脑洞大开打造实时显示当前值的Slider(滑动器)