SettingsPointOneView()
図の各ポイントのように、4 つの同様のビューがあります。この場合、SliderFirstPointX()
2つのビューが保存されます。SliderFirstPointY()
それら (SliderFirstPointX など) は、スライダーを使用して、カスタム フィギュアの特定のポイントの軸 (x、y) の値を制御および変更します。
外観:</p>
SliderFirstPointX() および SliderFirstPointY()
struct SliderFirstPointX: View{
@EnvironmentObject var geometryBuilder : GeometryBuilderViewModel
var body: some View{
VStack{
Text("Point one: X")
Text("\(Int(geometryBuilder[0].x))")
.foregroundColor(.gray)
.opacity(0.5)
Slider(value: $geometryBuilder[0].x, in: 10...380)
.accentColor(.orange)
.padding(3)
}
}
}
struct SliderFirstPointY: View{
@EnvironmentObject var geometryBuilder: GeometryBuilderViewModel
var body: some View{
VStack{
Text("Point one: Y")
Text("\(Int(geometryBuilder[0].y))")
.foregroundColor(.gray)
.opacity(0.5)
Slider(value: $geometryBuilder[0].y, in: 0...380)
.accentColor(.orange)
.padding(3)
}
}
}
SettingsPointOneView()
struct SettingsPointOneView: View{
var body: some View{
ZStack{
RoundedRectangle(cornerRadius: 10)
.stroke()
.frame(width: 360, height: 150, alignment: .leading)
HStack{
SliderFirstPointX()
SliderFirstPointY()
}.padding([.leading, .trailing], 50)
}
}
}
スクリーンショットのように、それらを LazyVGrid に配置したかったのです。そこで、定数 var を作成し、次のように初期化しようとしました。
let arrayOfViews: [Any] = [SettingsPointOneView(), SettingsPointTwoView(), SettingsPointThreeView(), SettingsPointFoutView()]
その後、いくつかのエラー メッセージが表示されました。
ForEach の前: • タイプとしてのプロトコル「Any」は、「AccessibilityRotorContent」に準拠できません。
LazyVGrid の前:
• 一般的な構造体 'LazyVGrid' では、'View' に準拠する 'some AccessibilityRotorContent' が必要です。
• 初期化子 'init(columns:alignment:spacing:pinnedViews:content:)' は、'view' に準拠する 'some AccessibilityRotorContent' を必要とします。
• 構造体「ViewBuilder」では、「一部の AccessibilityRotorContent」が「View」に準拠する必要があります
解決策が見つからなかったため、この実装を使用する必要がありましたが、満足していません。
struct ContentView: View {
...some code...
let first = [SettingsPointOneView()]
let second = [SettingsPointTwoView()]
let third = [SettingsPointThreeView()]
let fourth = [SettingsPointFourView()]
var body: some View {
..some code...
ScrollView{
LazyVGrid(columns: [GridItem(.flexible(minimum: 100, maximum: 200))]){
ForEach(0...0, id: \.self){
first[$0].padding(.top)
second[$0]
third[$0]
fourth[$0]
}
}
..some code...
}
このソリューションはかなりうまく機能しますが、この機能を実装する方法は間違っていると思います。
ForEach のビューの配列でアプローチを使用する方法はありますか?
正直なところ、私はプログラミングを始めて 3 か月になるので、Swift 開発者として何を学ぶべきかアドバイスをいただければ幸いです。