如何在SwiftUI Picker中创建老虎机隐喻?

时间:2019-07-31 17:10:58

标签: swiftui

是否可以使用swiftUI创建投币机以显示两组值?

Example picture

1 个答案:

答案 0 :(得分:1)

在UIKit中,UIPickerView提供了在选择器视图中具有多个组件的选项。 SwiftUI的Picker没有。但是,您可以在Picker中使用多个HStack。在某些情况下,透视图看起来可能与具有多个组件的UIPickerView略有不同,但在我看来,这是完全可以接受的。

这是一个老虎机的示例,该老虎机具有4个并排的拾取器,并带有一个在点击时“旋转”该老虎机的按钮(请注意,我禁用了拾取器上的用户交互,因此只能使用按钮来旋转它们):

enum Suit: String {
    case heart, club, spade, diamond

    var displayImage: Image {
        return Image(systemName: "suit.\(self.rawValue).fill")
    }
}
struct ContentView: View {
    @State private var suits: [Suit] = [.heart, .club, .spade, .diamond]
    @State private var selectedSuits: [Suit] = [.heart, .heart, .heart, .heart]

    var body: some View {
        VStack {
            HStack(spacing: 0) {
                ForEach(0..<self.selectedSuits.count, id: \.self) { index in
                    Picker("Suits", selection: self.$selectedSuits[index]) {
                        ForEach(self.suits, id: \.self) { suit in
                            suit.displayImage
                        }
                    }
                    .frame(minWidth: 0, maxWidth: .infinity)
                    .clipped()
                    .disabled(true)
                }
            }
            Button(action: self.spin) {
                Text("Spin")
            }
        }
    }

    private func spin() {
        self.selectedSuits = self.selectedSuits.map { _ in
            self.suits.randomElement()!
        }
    }
}

这只是一个例子,无疑可以改进,但这是一个不错的起点。

请记住,此代码确实会在Xcode Beta 5中引发警告-

  

'subscript(_ :)'已过时:有关迁移路径,请参见发行说明。

我没有机会对此进行研究,但是该示例仍然有效,应该可以帮助您实现目标。