ios - 将绑定结构传递给 SwiftUI 中的视图
问题描述
我目前正在尝试重构一些用于绘制用户输入的 SwiftUI 代码,以便更少的内容包含在 ContentView 中。
为此,我创建了一个结构,其中包含跟踪用户绘图所需的大部分有状态元素。
这是该枚举的样子:
import Foundation
import SwiftUI
struct DrawableStaff{
var drawing: Drawing = Drawing()
var drawingList: [Drawing] = [Drawing]()
var paths: [Path] = [Path]()
var PathHolder = Path()
var color = Color.primary
var lineWidth: CGFloat = 3.0
}
接下来,我重构了绘图代码以更好地适应枚举:
struct DrawingPad: View {
@Binding var drawableStaff: DrawableStaff
var body: some View {
GeometryReader { geometry in
Path { path in
for drawing in self.drawableStaff.drawings {
self.add(drawing: drawableStaff.drawing, toPath: &path)
}
self.add(drawing: self.drawableStaff.currentDrawing, toPath: &path)
self.drawableStaff.pathHolder = path
}
.stroke(self.drawableStaff.color, lineWidth: self.drawableStaff.lineWidth)
.background(Color(UIColor.systemBackground))
.gesture(
DragGesture(minimumDistance: 0.1)
.onChanged({ (value) in
let currentPoint = value.location
if currentPoint.y >= 0
&& currentPoint.y < geometry.size.height {
self.drawableStaff.currentDrawing.points.append(currentPoint)
}
})
.onEnded({ (value) in
self.drawableStaff.drawings.append(self.currentDrawing)
self.drawableStaff.currentDrawing = Drawing()
})
)
}
.frame(maxHeight: .infinity)
}
我试图通过使用在 ContentView 的正文中调用 DrawingPad
struct ContentView: View {
@State private var staff1DrawableStaff = DrawableStaff()
var body: some View {
VStack {
let staff1 = ZStack{
DrawingPad(drawableStaff: $staff1DrawableStaff)
}
}
}
我现在收到许多关于在 DrawableStaff 定义期间访问 drawableStaff 内部成员的错误。如何修复这些错误?
“无法将 'Binding' 类型的值转换为预期的参数类型 'Drawing'”
解决方案
推荐阅读
- r - Display sum after each row r
- java - Espresso 的 View Assertion 中是否有“或”运算符?
- php - Laravel 多个中间件在一个控制器中
- css - 动画没有缓和
- amazon-web-services - 为什么即使允许 ICMP 流量,我也无法 ping ec2 实例但可以 SSH
- c# - (C#) 如何隐藏 Selenium Webdriver 控制台应用程序,同时提供驱动程序的自定义路径?
- ffmpeg - 使用 ffmpeg 使安静的音频部分静音
- c++ - 为什么 A* 没有找到任何路线?
- r - 如何使用 R 为异构数据类型(表包含数字、逻辑、字符、NA 和空单元格)生成热图?(还没解决)
- angular - Angular 5 - 基本计时器对象未在 UI 中更新