arrays - SwiftUI 中用于 ForEach 的自定义视图数组
问题描述
我有 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 开发人员应该学习什么的建议。
解决方案
推荐阅读
- elixir - Elixir 通用验证装饰器。引用和取消引用
- r - R:将向量中的值插入矩阵的某些列
- python - 在 selenium docker 映像中为 headless chrome 安装证书
- tableau-api - Tableau 命令行 - 导出季度文件
- python - 如何在列表中对字典进行排序?
- spring-webflux - 继续 zip(),如果一个源已完成
- javascript - 合并两个数组而不覆盖
- matlab - 如何使用 Matlab 读取 3D 文件中的颜色?
- python - 来自外部库的代码覆盖率 python
- powershell - PowerShell Where-Object - 没有返回 - 我一定做错了什么