设置连续轮选择器 - SwiftUI
Posted
技术标签:
【中文标题】设置连续轮选择器 - SwiftUI【英文标题】:Set continuous wheel picker - SwiftUI 【发布时间】:2020-11-29 14:29:18 【问题描述】:如何显示可以在选定范围内无限向上或向下滚动的选择器?就像您在 ios 设备中设置闹钟一样。现在,如果我的范围在 0 到 60 之间,我只能向上滚动直到达到 60,然后向下滚动以返回 0。我希望它是连续的,当我达到 60 时,我会重新开始循环。
【问题讨论】:
只需创建大量重复内容的元素并将初始值设置为中间索引 创建一个巨大的元素有什么意义?我只需要循环 0 到 60 之间的数字。想象一下赌场的轮盘赌,这些值会无限重复 只要做一个大值,使用值% 60。应该很容易。 我真的不明白我该怎么做,这可能很容易,但是如何让它像这样工作的代码? 【参考方案1】:您可以简单地添加一个较大的值作为范围的上限,并将初始值设置为它的一半,然后将提示值除以 60 value % 60
得到截断的值。
要在选择器值更改时执行方法,您可以使用此 [post][1] 中显示的方法:
import SwiftUI
struct ContentView: View
@State private var selection = 300
var minutes: Int selection % 60
var body: some View
Picker(selection: $selection, label: Text("Minutes:"))
ForEach(0 ..< 600)
Text(String(format: "%02d", $0 % 60))
.onChange(of: selection, perform: valueChanged)
func valueChanged(_ value: Int)
selection = 300 + value % 60
print("Minutes: \(minutes)")
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView()
【讨论】:
无需使用自定义扩展。您可以将onReceive 用于 SwiftUI 1 和 2,或者将 onChange 用于 SwiftUI 2。以上是关于设置连续轮选择器 - SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章