我正在使用拖动手势来更改Color对象的色相/饱和度。这个想法是,您可以在屏幕上拖动并查看所有Hue值(0.0-1.0),并使用饱和度从上到下相同。
我需要屏幕的大小(或视图,这是一个单视图应用程序),以便将CGPoint值规范化/转换为0.0-1.0之间的范围,但是无论如何我都无法找到该信息。有很多讨论这个话题的线程,但是当我只想检索它时,他们通常会谈论如何设置一个视图的宽度/高度。
我一切正常,只是我正在使用硬编码值对其进行规范化。
答案 0 :(得分:3)
查看GeometryReader。它允许您获取当前视图的大小:
struct ContentView: View {
var body: some View {
GeometryReader { geo in
VStack {
Text("Hello World!")
Text("Size: (\(geo.size.width), \(geo.size.height))")
}
}
}
}
这是一个示例,您可以在屏幕上拖动以更改色相值:
struct ContentView: View {
@State private var hue: CGFloat = 0
var body: some View {
GeometryReader { geo in
ZStack {
Color.white
.gesture(DragGesture().onChanged({ value in
self.hue = value.location.y / geo.size.height
}))
VStack {
Text("Hello World!")
Text("Size: (\(geo.size.width), \(geo.size.height))")
Text("Hue: \(self.hue)")
}.allowsHitTesting(false)
}
}
.edgesIgnoringSafeArea(.all)
}
}
答案 1 :(得分:0)