如何处理 SKView() 之外的黑色区域(在Swift Playground)
How to deal with the black area beyond the SKView() (In Swift Playground)
我正在尝试在 Swift Playground 中的工作 运行 中使用 SpriteKit+SwiftUI。这是我的一些代码
struct SwiftUI: View {
var body: some View {
Test()
}
}
struct Test: UIViewRepresentable {
func makeUIView(context: Context) -> SKView {
let sceneView = SKView()
let gameScene = GameScene()
gameScene.size = CGSize(width: 500, height: 600)
gameScene.scaleMode = .aspectFit
sceneView.presentScene(gameScene)
return sceneView
}
func updateUIView(_ uiView: SKView, context: Context) {
}
}
它运行良好,但总是有这个可怕的黑色区域超出我的 SKView,如下图所示。
Black area in the View.
我曾尝试更改 sceneView.backgroundcolor
,或更改 gameScene.size
和 sceneView.size
,但这些都不起作用。
如果您能给我一些建议,非常感谢!
问题是对 Test()
的调用还需要设置明确的帧大小。否则,Test
视图会占据整个可用屏幕 space,而 sceneView 只会占据其中的一部分 space。
下面的示例与您发布的示例相同,在 Test()
上设置了一个显式框架(和一个虚拟 GameScene
)。这在操场上有效,结果只是一个紫色方块,视图之外没有黑色区域:
import SwiftUI
import SpriteKit
import PlaygroundSupport
let width: CGFloat = 500
let height: CGFloat = 500
struct ContentView: View {
var body: some View {
Test()
.frame(width: width, height: height)
}
}
struct Test: UIViewRepresentable {
func makeUIView(context: Context) -> SKView {
let sceneView = SKView()
let gameScene = GameScene()
gameScene.size = CGSize(width: width, height: height)
gameScene.scaleMode = .aspectFit
sceneView.presentScene(gameScene)
return sceneView
}
func updateUIView(_ uiView: SKView, context: Context) {
}
}
class GameScene: SKScene {
override func didMove(to view: SKView) {
let node = SKShapeNode(rect: CGRect(x: 0, y: 0, width: size.width, height: size.height))
node.fillColor = .purple
addChild(node)
}
}
PlaygroundPage.current.setLiveView(ContentView())
我正在尝试在 Swift Playground 中的工作 运行 中使用 SpriteKit+SwiftUI。这是我的一些代码
struct SwiftUI: View {
var body: some View {
Test()
}
}
struct Test: UIViewRepresentable {
func makeUIView(context: Context) -> SKView {
let sceneView = SKView()
let gameScene = GameScene()
gameScene.size = CGSize(width: 500, height: 600)
gameScene.scaleMode = .aspectFit
sceneView.presentScene(gameScene)
return sceneView
}
func updateUIView(_ uiView: SKView, context: Context) {
}
}
它运行良好,但总是有这个可怕的黑色区域超出我的 SKView,如下图所示。
Black area in the View.
我曾尝试更改 sceneView.backgroundcolor
,或更改 gameScene.size
和 sceneView.size
,但这些都不起作用。
如果您能给我一些建议,非常感谢!
问题是对 Test()
的调用还需要设置明确的帧大小。否则,Test
视图会占据整个可用屏幕 space,而 sceneView 只会占据其中的一部分 space。
下面的示例与您发布的示例相同,在 Test()
上设置了一个显式框架(和一个虚拟 GameScene
)。这在操场上有效,结果只是一个紫色方块,视图之外没有黑色区域:
import SwiftUI
import SpriteKit
import PlaygroundSupport
let width: CGFloat = 500
let height: CGFloat = 500
struct ContentView: View {
var body: some View {
Test()
.frame(width: width, height: height)
}
}
struct Test: UIViewRepresentable {
func makeUIView(context: Context) -> SKView {
let sceneView = SKView()
let gameScene = GameScene()
gameScene.size = CGSize(width: width, height: height)
gameScene.scaleMode = .aspectFit
sceneView.presentScene(gameScene)
return sceneView
}
func updateUIView(_ uiView: SKView, context: Context) {
}
}
class GameScene: SKScene {
override func didMove(to view: SKView) {
let node = SKShapeNode(rect: CGRect(x: 0, y: 0, width: size.width, height: size.height))
node.fillColor = .purple
addChild(node)
}
}
PlaygroundPage.current.setLiveView(ContentView())