- 如何调用aUIView. presentScene(aSKScene,过渡:aSKTransition)与aUIView. addSubview(aUITextField!)一致操作?**
***没有***转换,没有问题。*有*转换,UITextField滞后于转换-不在统一中。
- 如何调用aUIView. presentScene(aSKScene,过渡:aSKTransition)与aUIView. addSubview(aUITextField!)一致操作?**
- 代码**
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,然后添加SKSpriteNode图像。
然而它们与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
同样,***没有***转换,没有问题。*有*转换,UITextField滞后于转换-不在统一中。
我还在忍受着这个...但是我想是时候叫一些增援了!在我等待加略山的时候,我仍然会继续工作。
1条答案
按热度按时间6pp0gazn1#
尝试添加文本视图,然后将对
presentScene()
的调用 Package 到对DispatchQueue.main.async()
的调用中。这样,文本字段将在您开始显示视图之前添加到视图中。