使用 SwiftUI,我想创建一个最小/最大范围为 5-20 的滑块,用户可以在其中滑动并向上移动 5。开箱即用的滑块看起来非常“平坦”/平滑。有没有一种方法可以添加所述刻度线,以便滑块看起来像“捕捉”到刻度线?
如果滑块被认为不是实现该效果的正确方法,我愿意接受其他选项。
Slider 有很多初始化选项,其中一些包含“step”参数,用于创建捕捉效果。它的边缘没有可见的刻度线,但您可以在旁边手动创建它。
import SwiftUI
struct SliderView: View {
@State var value: CGFloat = 10
let min: CGFloat = 5
let max: CGFloat = 20
let step: CGFloat = 5
var body: some View {
VStack {
Text(formated(value: value))
Slider(
value: $value,
in: min...max,
step: step,
minimumValueLabel: Text(formated(value: min)),
maximumValueLabel: Text(formated(value: max)),
label: { })
VStack(spacing: 0) {
Slider(
value: $value,
in: min...max,
step: step)
.accentColor(.red)
HStack(spacing: 0) {
let count: Int = Int((max / step))
ForEach(0..<count) { index in
VStack {
Text("I")
Text("\(index * Int(step) + Int(min))")
}
.offset(x:
index == 1 ? 5 :
index == 2 ? 4 :
0
)
if index != (count - 1) {
Spacer()
}
}
}
.padding(.horizontal, 8)
}
.padding()
}
.padding()
}
func formated(value: CGFloat) -> String {
return String(format: "%.0f", value)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2723 次 |
| 最近记录: |