如何调用aUIView.presentScene(aSKScene, transition: aSKTransition)以与aUIView.addSubview(aUITextField!)一致操作?

How can I get a call to aUIView.presentScene(aSKScene, transition: aSKTransition) to act in unison with aUIView.addSubview(aUITextField!)?

提问人: 提问时间:1/1/2023 更新时间:1/1/2023 访问量:59

问:

如何调用aUIView.presentScene(aSKScene, transition: aSKTransition)以与aUIView.addSubview一致操作。

没有过渡,就没有问题。发生 1st 然后 – 不是统一的。SKTransitionUITextFieldSKTransition

就像,被种植在里面,坐在那里等待赶上UITextFieldviewViewControllerSKTransition

法典

func showScene(theSceneName: String) {

    if let ourScene = SKScene(fileNamed: theSceneName) {
                                    
        addTextFieldToVC(toSceneName: theSceneName)
        // NB: theSceneName is passed by Reference so we can
        //     return here before we call presentScene(...)
        addGamePiecesToScene(toScene: theSceneName)

        if let theView = self.view as! SKView? {
            theView.ignoresSiblingOrder = true
            theView.showsFPS = true
            theView.showsNodeCount = true
                
            // Finally, present the scene
            let theTransition = SKTransition.doorway(withDuration: 2.0)
            theView.presentScene(ourScene, transition: theTransition)
        }
            
    }   // if let ourScene
        
}   // showScene


func addTextFieldToVC(toSceneName: String) {

    if (toSceneName == "GameScene") {
        if let theView = self.view as! SKView? {
            aUITextField = UITextField(frame:CGRectMake(x: aXValue, y: aYValue))
            theView.addSubview(aUITextField!)
        }
    }

}


func addGamePiecesToScene(toScene: SKScene) {

    myRoom = SKSpriteNode(texture: SKTexture(imageNamed: roomImg))
    myRoom!.zPosition = roomZposition
    // etc with .size, .position
    toScene.addChild(myRoom!)

}

如上所示,我添加了 UITextField 1st,并添加了 SKSpriteNode 图像 2nd。

然而,它们与SKTransition并不同步。它们同步出现,只是没有 SKTransition。

FWIW,我已经尝试了这个序列,但没有变化:showScene

theView.presentScene(theSceneName, transition: theTransition)
DispatchQueue.main.async {
    addTextFieldToVC(toSceneName: theSceneName)
}

我也开始尝试使用完成处理程序:

override func viewDidLoad() {
        
    super.viewDidLoad()
                
    setupScene()
        
    // Completion Handler for showScene()
    showModifiedScene {
                 
        if thisSceneName == "GameScene" {  // a global var
            addTextFieldToVC(toSceneName: thisSceneName!)
        }
            
    }
     
}   // viewDidLoad


// modified for callback option??
func showScene(theSceneName: String) {

    if let ourScene = SKScene(fileNamed: theSceneName) {
                                    
        addGamePiecesToScene(toScene: ourScene)

        showModifiedScene()
            
    }   // if let ourScene
        
}   // showScene


func showModifiedScene(completionBlock: () -> Void) {

    if thisSceneName == "GameScene" {  // a global var
        if let ourScene = SKScene(fileNamed: thisSceneName!) {
            if let theView = self.view as! SKView? {
                theView.ignoresSiblingOrder = true
                theView.showsFPS = true
                theView.showsNodeCount = true
                    
                let theTransition = SKTransition.doorway(withDuration: 2.0)
                theView.presentScene(ourScene, transition: theTransition)
            }
        }

        completionBlock()
    }
                
}   // showModifiedScene

同样,没有过渡,就没有问题。发生 1st 然后 – 不是统一的。SKTransitionUITextFieldSKTransition

我还在为这个而烦恼......但我认为是时候呼吁一些增援了!在等待髑髅地的时候,我仍然会工作。

iOS Swift 回调

评论


答:

0赞 Duncan C 1/1/2023 #1

尝试添加文本视图,然后将调用 包装在对 的调用中。presentScene()DispatchQueue.main.async()

这样,在开始显示该视图之前,文本字段将添加到您的视图中。

评论

0赞 1/1/2023
我希望我能封你为“英雄”......但这次不是.也许以后。无论有没有,物体首先出现,保持静止并等待,直到完成它的事情。我认为核心问题是属于 和 各种属于 ?– 我多么希望我能“假装”并强制它成为一个图像,就像 SKSpriteNode 一样。DispatchQueueUITextFieldpresentSceneUITextFieldViewControllerSKScenesViewUITextField
0赞 Duncan C 1/1/2023
你追求的效果是什么?
0赞 1/1/2023
当这种情况发生时,我希望添加的(添加的 )和添加的(添加的通过)一起参与,而不是分开。我可以第一次打电话,然后用一个 - 但它的有效性取决于 CPU 速度。我需要了解回调。但我真的认为我只会很高兴为.无需等待SKTransitionUITextFieldaddSubViewViewControllerCGScenesaddChildSKTransitionpresentSceneDispatchQueueaddUTextFielddurationCGScenesUITextFieldSKTransitionUITextFieldSKTransition
0赞 1/3/2023
还没有弄清楚所有细节 - 但答案是使用 ,而不是这样我就可以在所有内容上使用。SKLabelNodeUITextField.addChild