确定 SwiftUI 视图中 SpriteKit SKScene 的实际高度
Determine actual height of a SpriteKit SKScene inside a SwiftUI View
我有一个 SwiftUI 视图,里面有 3 个 SpriteKit SKScenes 的 VStack。
虽然 scoreView 和 accelerometerView 具有固定高度,但 gameScene 没有。
它需要剩余的 space 并以某种方式取决于设备。
struct ContentView: View {
@StateObject private var gameScene = GameSKScene()
@StateObject private var scoreView = ScoreSKScene()
@StateObject private var accelerometerView = AccelerometerSKScene()
var body: some View {
VStack {
SpriteView(scene: scoreView)
.frame(height: 50)
SpriteView(scene: gameScene)
SpriteView(scene: accelerometerView)
.frame(height: 50)
}.ignoresSafeArea()
}
}
现在在 gameScene 中设置场景有问题,因为场景本身没有关于其大小的信息。
我可以通过 UIScreen.main.bounds.width
获取宽度,但如何获取实际高度?
如果我没理解错的话,你是想让gameScene
SpriteView
在占完其他两个场景后,把剩下的space填满。您可以使用 GeometryReader
(documentation here).
用法示例:
var body: some View {
GeometryReader { geo in
VStack {
SpriteView(scene: scoreView)
.frame(height: 50)
SpriteView(scene: gameScene)
.frame(height: geo.size.height - 100)
SpriteView(scene: accelerometerView)
.frame(height: 50)
}
}
}
我有一个 SwiftUI 视图,里面有 3 个 SpriteKit SKScenes 的 VStack。 虽然 scoreView 和 accelerometerView 具有固定高度,但 gameScene 没有。 它需要剩余的 space 并以某种方式取决于设备。
struct ContentView: View {
@StateObject private var gameScene = GameSKScene()
@StateObject private var scoreView = ScoreSKScene()
@StateObject private var accelerometerView = AccelerometerSKScene()
var body: some View {
VStack {
SpriteView(scene: scoreView)
.frame(height: 50)
SpriteView(scene: gameScene)
SpriteView(scene: accelerometerView)
.frame(height: 50)
}.ignoresSafeArea()
}
}
现在在 gameScene 中设置场景有问题,因为场景本身没有关于其大小的信息。
我可以通过 UIScreen.main.bounds.width
获取宽度,但如何获取实际高度?
如果我没理解错的话,你是想让gameScene
SpriteView
在占完其他两个场景后,把剩下的space填满。您可以使用 GeometryReader
(documentation here).
用法示例:
var body: some View {
GeometryReader { geo in
VStack {
SpriteView(scene: scoreView)
.frame(height: 50)
SpriteView(scene: gameScene)
.frame(height: geo.size.height - 100)
SpriteView(scene: accelerometerView)
.frame(height: 50)
}
}
}