2014-09-05 10 views
5

Sto aggiungendo un UIView alla vista di un SKScene. Più tardi, quando desidero rimuovere tale visualizzazione da UIView, usare il metodo standard di uiview.removeFromSuperview non sembra funzionare. Come dovrei realizzare questo invece? Ecco come aggiungo l'UIView:removeFromSuperview non funziona per Uiview aggiunto a SKScene

func addContainerView() { 

    let containerRect = CGRectMake(400, 24, 600, 720) 
    smallerView = UIView(frame: containerRect) 
    smallerView.backgroundColor = UIColor.redColor() 
    self.view.addSubview(smallerView) 
} 

Ecco come sto cercando di rimuoverlo:

func removeContainerView() { 

    smallerView.removeFromSuperview() 
} 

tutto questo avviene all'interno della classe SKScene, ecco 'sé' si riferisce a quella scena . Qualche idea?

+0

Si aggiunge effettivamente a 'self.view', che è' SKView' –

+0

Grazie a @AndreyGordeev, questa è un'osservazione interessante, una vera verità, ma non sono sicuro di come influisce sul mio problema. SKView eredita da UIView e quindi la rimozione delle subview deve funzionare allo stesso modo, giusto? – zeeple

+0

Funziona bene per me. Deve esserci qualcos'altro che lo sta facendo rimanere sullo schermo. Ho aggiunto una vista durante viewDidLoad nel modello di SceneKit e la rimuovo nel metodo handleTap e tutto funziona come previsto. – bjtitus

risposta

1

Prima di tutto mi chiedo quale versione di swift stai usando.

self.view è opzionale a 1.2 quindi il vostro dovrebbe digitare: self.view?.addSubview() se si prendono di mira rapida 1.2

ho provato in rapida 1.2 per fare una semplice applicazione

class GameScene: SKScene { 

    let subview = UIView() 

    override func didMoveToView(view: SKView) { 

    subview.frame = CGRectMake(0, 0, 100, 100) 
    subview.backgroundColor = SKColor.orangeColor() 
    self.view?.addSubview(subview) 
    } 

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    removeContainerView() 
    } 

    func removeContainerView() { 
    subview.removeFromSuperview() 
    } 
} 

Le opere di codice di cui sopra ottimo. mi viene in mente un paio di motivi la visualizzazione non venga rimosso

  1. Sei sicuro removeContainerView è effettivamente chiamato. Prova a stabilire un punto di interruzione per vedere se si chiama
  2. Se hai impostato il codice SKView, qualcosa potrebbe essere stato impostato in modo errato.
  3. tua visualizzazione secondaria viene deallocato o qualcosa

Per eseguire il debug completamente il problema abbiamo bisogno di vedere un po 'di codice.

Ciò di cui abbiamo bisogno è:

  1. Dichiarazione della vostra visualizzazione secondaria
  2. Tutte le funzioni che chiamano removeContainerView()

Ancora meglio sarebbe quello di pastebin vostra classe SKScene.

Problemi correlati