swift - 有没有办法为滑块定义离散步骤?
问题描述
目前我正在这样做。
Slider(value: $object, in: 500...3000, step: 500)
我想做一些类似的事情
step: 100, 500, 600, 1000, 10000
解决方案
这是一种可能的方法 - 将系统包装Slider
到具有重新映射逻辑的自定义滑块中。
演示(简单变体)使用 Xcode 13 / iOS 15 准备和测试
struct TestIrregularSliderView: View {
@State private var current = 500
var body: some View {
VStack {
IrregularSlider(value: $current, in: [100, 500, 600, 1000, 10000])
Text("Value: \(current)")
}
}
}
struct IrregularSlider<T: Comparable>: View {
@Binding var value: T
let values: [T]
private let upperBound: Float
@State private var index: Int
init(value: Binding<T>, in values: [T]) {
self._value = value
self._index = State(initialValue: values.firstIndex(of: value.wrappedValue) ?? 0)
self.values = values
self.upperBound = Float(values.count - 1)
}
var body: some View {
Slider(value: Binding(
get: { Float(index) },
set: { index = Int($0); value = values[Int($0)] }
), in: 0...upperBound, step: 1)
}
}
推荐阅读
- c# - 调用默认构造函数时如何使用 ApplicationUserManager?
- matrix - 计算由 SSRS 中的矩阵生成的值
- c# - 具有现有 CosmosDB 404 错误的实体框架核心
- prestashop - 覆盖模块的管理文件
- spring - Spring Boot+Spring Batch+MySql 不工作
- kubernetes - 问题将 okd 集群从 3.6 升级到 3.7(试图将其完全升级到最新版本)
- c# - 如何在 Xamarin 后面的代码中访问 x:name?
- ruby-on-rails - 找不到用户控制器 Rails 教程第 10 章的“更新”操作
- laravel - 如何在浏览器上显示 Vue-Dropzone 响应?
- angular - 无法安装主题