0

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 開発者として何を学ぶべきかアドバイスをいただければ幸いです。

4

0 に答える 0