swift - 如何处理 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 之外总是有这个可怕的黑色区域,如下图所示。
视图中的黑色区域。
我试图改变sceneView.backgroundcolor
,或改变gameScene.size
,sceneView.size
但那些只是没有工作。如果您能给我一些建议,非常感谢!
解决方案
问题是调用Test()
也需要有一个明确的帧大小设置。否则,Test
视图会占用整个可用屏幕空间,而场景视图仅占用该空间的一部分。
下面的示例与您发布的示例相同,在Test()
(和一个 dummy 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())
推荐阅读
- mysql - 检查子查询结果是否存在,然后减去它
- python - 找不到 django-rest-auth url
- api - 微服务架构中的授权/认证
- node.js - 在 Node.js 中访问整个应用程序中的变量,而不在所有文件中导入它
- laravel - 如何在laravel中获得2个日期之间的减法总数?
- python - 如何在同一行调用 jinja2 中的 2 个宏?
- json - 如何使用python从字符串列表中删除生成的json旁边的双引号
- angular - 无法在 Angular 中实例化编辑器
- python-3.x - 在 Azure 应用服务中部署 Hello-world Python Flask
- python - 根据重复项从列表中构建字典