2017-08-11 4 views
0

J'utilise un modèle d'application de jeu dans Swift 3 et lorsque je passe de l'écran de démarrage à la scène «Jeu», le bouton de l'écran «Démarrer» ne part pas. J'ai lu d'autres personnes à ce sujet mais rien n'a aidé. Mon bouton est un uibutton programmé avec un rectangle arrondi derrière le bouton pour le rendre joli. Le problème est que (le bouton et le UIBezierpath) ne disparaitra pas lorsque je changerai de scène - c'est exactement au même endroit que l'écran de démarrage. Mon code avec le bouton UIBezierpath:Ajout programmé UIButton ne disparaît pas après avoir changé de scène

let playAgain = UIButton() 
     playAgain.frame = CGRect(x: 225, y: 247, width: 115, height: 36) 

     playAgain.backgroundColor = SKColor.lightGray 
     playAgain.setTitle("Play", for: .normal) 

    playAgain.setTitleColor(.black, for: .normal) 

     self.view?.addSubview(playAgain) 
     playAgain.addTarget(self, action: #selector(playAgainTapped(_:)), for: .touchUpInside) 
     //now for the bezierpath/ rounded rect 
     //let doYourPath = UIBezierPath(rect: CGRect(x: 20, y: 20, width: 100, height: 36)) 

     //this also works 
     let roundRect = UIBezierPath(roundedRect: CGRect(x: 218, y: 240, width: 130, height: 50), cornerRadius: 18) 
     let layer = CAShapeLayer() 
     layer.path = roundRect.cgPath 
     layer.strokeColor = UIColor.black.cgColor 
     layer.fillColor = UIColor.lightGray.cgColor 
     self.view?.layer.addSublayer(layer) 

func playAgainTapped(_ sender: Any?) -> Void { 
     print("***********") 

     backToGame() 
    } 

code de commutation scènes:

func backToGame(){ 
     removeAllChildren() 

     run(SKAction.sequence([ 
      SKAction.wait(forDuration: 3.0), 
      SKAction.run() { 
       // 5 
       let reveal = SKTransition.flipHorizontal(withDuration: 0.5) 
       let scene = GameScene(size: self.size) 
       self.view?.presentScene(scene, transition:reveal) 
      } 
      ])) 
    } 

Toutes les idées?

+0

Que fait 'removeAllChildren'? – the4kman

+0

@ the4kman supprime le texte du bouton. –

Répondre

0

Vous présentez la scène sur la même vue que l'aperçu du bouton. Puisque la scène est indépendante des vues qui sont sur la scène, votre bouton restera intact, vous devez donc supprimer explicitement le bouton si vous voulez qu'il soit supprimé.

Déclarez le bouton et le rectangle arrondi globalement et les retirer de leur superview/surcouche à backToGame.

let playAgain = UIButton() 
let layer = CAShapeLayer() 

func backToGame(){ 
    removeAllChildren() 

    playAgain.removeFromSuperview() 
    layer.removeFromSuperlayer() 

    run(SKAction.sequence([ 
     SKAction.wait(forDuration: 3.0), 
     SKAction.run() { 
      // 5 
      let reveal = SKTransition.flipHorizontal(withDuration: 0.5) 
      let scene = GameScene(size: self.size) 
      self.view?.presentScene(scene, transition:reveal) 
     } 
     ])) 
} 
+0

Merci beaucoup ça marche! Avez-vous une suggestion pour un bon article sur les vues et ce genre de choses? –