如何解决如何处理 SKView() 之外的黑色区域在 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
视图会占用整个可用屏幕空间,而场景视图仅占用该空间的一部分。
下面的示例与您发布的示例相同,在 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())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。