首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有没有一种方法可以在SpriteView场景中关闭SwiftUI视图?

有没有一种方法可以在SpriteView场景中关闭SwiftUI视图?
EN

Stack Overflow用户
提问于 2020-07-21 18:56:53
回答 1查看 96关注 0票数 0

我的场景是这样呈现的

代码语言:javascript
代码运行次数:0
运行
复制
struct GameView: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    
    func scene(size:CGSize) -> SKScene {
        let scene = GameScene()
        scene.size = size
        scene.scaleMode = .fill
        scene.physicsWorld.gravity = CGVector.zero
        return scene
    }
    
    var body: some View {
        GeometryReader { geometry in
            if #available(iOS 14.0, *) {
                SpriteView(scene: self.scene(size:geometry.size))
                    .edgesIgnoringSafeArea(.all)
            } else {
                // Fallback on earlier versions
                Text("Game Only available from iOS 14")
            }
        }
        .navigationTitle("")
        .navigationBarHidden(true)
    }
}

在其他非spriteKit视图中,我使用self.presentationMode.wrappedValue.dismiss()导航回上一页。在这种情况下,是否有类似的事情可以在游戏结束时从场景中触发?(所有视图都在导航视图中)

EN

回答 1

Stack Overflow用户

发布于 2021-05-05 00:19:58

说大也大吧。我不认为目前你可以做到这一点,但我为我的游戏所做的(我不确定这是否是很好的编码练习)是使用ViewManager。

ViewManager所做的是通过包含一个或多个视图的布尔值,将某些视图设置为隐藏或可见。布尔值从场景内部更改,并反映到swiftui。

下面是一个示例:

代码语言:javascript
代码运行次数:0
运行
复制
class ViewManager: ObervableObject {

    @Published private var exitView = false

    public static var shared = ViewManager()

    privat init() { }
}

class level: SKScene {
    /*Game Code*/
    override func update(_ currenTime: Interval) {
        if /*end level condition*/ {
            ViewManager.shared.exitView = true
        }
    }
}

struct GameView: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    @StateObject private var viewManager = ViewManager.shared

    /*your code here*/

    var body: some View {
        ZStack {
            /*SpriteView*/
            if viewManager.exitView {
                Button {
                    presentationMode.wrappedValue.dismiss()
                    viewManager.exitView = false
                } label: {
                    Image(systemName: "arrow.uturn.left")
                }
            }
        }
    }
}

ViewManager更像是一种变通方法,它有很大的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63013003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档