我有 4 个类似的视图,就像SettingsPointOneView()
图中的每个点一样。他们存储 2 个视图SliderFirstPointX()
,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)
}
}
}
设置PointOneView()
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' 要求'some AccessibilityRotorContent' 符合'View';
• Initializer 'init(columns:alignment:spacing:pinnedViews:content:)' 要求'some AccessibilityRotorContent' 符合'View';
• 结构“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 开发人员应该学习什么的建议。