那么,如果想要Canvas
知道已解析符号的大小(边界框),例如,相对于其他符号或直接绘制到其中的路径的放置,通过检查GraphicsContext.ResolvedSymbol.size属性是不可能的吗?
这令人惊讶。不是我想做的事情的障碍,但想了解为什么会出现这种特殊行为(如果有人知道并可以解释的话)?
下面重现了关于切换按钮输出的简单示例
canvas size: (400.0, 350.0); symbol size: (400.0, 350.0)
toggled
canvas size: (500.0, 450.0); symbol size: (500.0, 450.0)
toggled
canvas size: (400.0, 350.0); symbol size: (400.0, 350.0)
struct ContentView: View {
@State private var large = false
var body: some View {
VStack {
Button {
large.toggle()
print("toggled")
} label: {
Text("Toggle Size")
}
Spacer()
Canvas { context, size in
let s0 = context.resolveSymbol(id: 0)!
print("canvas size: \(size); symbol size: \(s0.size)")
context.draw(s0, in: CGRect(origin: .zero, size: size))
} symbols: {
Path(ellipseIn: CGRect(origin: .zero, size: CGSize(width: 300, height: 300)))
.stroke(.green, lineWidth: 10)
.border(.blue)
.tag(0)
}
.frame(width: large ? 500 : 400, height: large ? 450 : 350)
}.padding()
}
}