【发布时间】:2019-10-07 14:17:42
【问题描述】:
我正在尝试将SpriteKit 与基于SwiftUI 的接口一起使用,但在初始化我的SKScene 时遇到了问题。
首先,包含SKView 的UIViewRepresentable 取自similar question:
struct SpriteKitContainer: UIViewRepresentable {
let scene: SKScene
func makeUIView(context: Context) -> SKView {
return SKView(frame: .zero)
}
func updateUIView(_ view: SKView, context: Context) {
view.presentScene(scene)
}
}
这里的一个关键部分是它需要在初始化 SpriteKitContainer 之前初始化 SKScene。
我目前有以下缩写的 sn-p 这样做:
import SwiftUI
import SpriteKit
struct GameView: View {
@State private var isEnabled = true
var body: some View {
let tapGesture = TapGesture()
.onEnded { value in }
// This size is obviously wrong
let size = UIScreen.main.bounds.size
let scene = Scene(size: size)
scene.scaleMode = .resizeFill
return SpriteKitContainer(scene: scene)
.disabled(!isEnabled)
.frame(maxWidth: .infinity,
maxHeight: .infinity,
alignment: .center)
.gesture(tapGesture)
.padding(.all, 30)
}
}
我只包含TapGesture 来说明为什么body 的结构是这样的。包含代码后,一切都会按预期工作,但场景使用的大小显然是错误的(它无法考虑填充和导航元素)。
但是,我目前还没有找到任何其他方法来获取大小或框架,并且为 Scene(size:) 调用发送 .zero 大小也不会正确调整大小。
我的假设是,由于我仍在使用 SwiftUI,因此我错过了一些前导步骤。否则,我可以根据我所知道的计算出一个新的CGSize,但这让我觉得这里的方法是错误的。
【问题讨论】:
-
你的场景总是会根据视图调整大小,如果你需要填充,你需要在视图级别考虑它
标签: ios swift sprite-kit swiftui ios13