Я хотел бы создать сетку, похожую на шахматную раскладку и помеченную от 1 до 100, начиная с нижнего левого угла. Это должно выглядеть примерно так:
...
5(белый) 6(черный) 7(белый) 8(черный)
1(черный) 2(белый) 3(черный) 4(белый)
Я не могу добиться правильного отображения маркировки или цвета. Это моя попытка. Как я могу это настроить?
import SwiftUI
struct LevelOverviewView: View {
let numberOfLevels = 100
var body: some View {
ScrollView {
LazyVGrid(columns: Array(repeating: GridItem(.fixed(70)), count: 4), content: {
ForEach((1...numberOfLevels).reversed(), id: \.self) { i in
ZStack{
Rectangle()
.fill(i % 2 == 0 ? .black : .white)
.aspectRatio(1.0, contentMode: .fit)
Text("\(i)")
.foregroundStyle(i % 2 == 1 ? .black : .white)
}
}
})
}
.background(.red)
}
}
#Preview {
LevelOverviewView()
}
Вы можете попробовать этот подход, меняя местами числа с шагом 4, как показано на рисунке. пример кода:
struct ContentView: View {
var body: some View {
LevelOverviewView()
}
}
struct GridCell: Identifiable {
let id = UUID()
var value: Int
}
struct LevelOverviewView: View {
@State private var gridCell: [GridCell] = []
let numberOfLevels = 100
let step = 4 // <--- here, adjust as desired
var body: some View {
ScrollView {
LazyVGrid(columns: Array(repeating: GridItem(.fixed(70)), count: step)) {
ForEach(gridCell) { cell in
ZStack {
Rectangle()
.fill(cell.value % 2 == 0 ? .black : .white)
.aspectRatio(1.0, contentMode: .fit)
Text("\(cell.value)")
.foregroundStyle(cell.value % 2 == 1 ? .black : .white)
}
}
}
}
.background(.red)
.onAppear {
gridCell = (1...numberOfLevels).map{ GridCell(value: $0) }.reversed()
// --- here
for i in stride(from: 0, to: gridCell.count, by: step) {
let endIndex = min(i + step, gridCell.count)
gridCell[i..<endIndex].reverse()
}
}
}
}