微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何处理 SKView() 之外的黑色区域在 Swift Playground 中

如何解决如何处理 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.sizesceneView.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 举报,一经查实,本站将立刻删除。