2014-09-05 9 views
5

Ich füge eine UIView zur Ansicht eines SKScene hinzu. Später, wenn ich dieses UIView-Formular von seinem Superview entfernen möchte, scheint die Standardmethode von uiview.removeFromSuperview nicht zu funktionieren. Wie sollte ich das stattdessen erreichen? Hier ist, wie ich die UIView hinzufügen:removeFromSuperview funktioniert nicht, wenn UIView zu SKScene hinzugefügt wird

func addContainerView() { 

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

Hier ist, wie ich es zu entfernen bin versucht:

func removeContainerView() { 

    smallerView.removeFromSuperview() 
} 

Dies alles geschieht in der SKScene Klasse, so hier ‚Selbst‘ bezieht sich auf die Szene . Irgendwelche Gedanken?

+0

Sie fügen es tatsächlich zu 'self.view', das ist' SKView' –

+0

Dank @AndreyGordejew, dies ist eine interessante Beobachtung, eine ziemlich wahr, aber ich bin mir nicht sicher, wie es mein Problem betrifft. SKView erbt von UIView, und das Entfernen von Subviews sollte auf die gleiche Weise funktionieren, richtig? – zeeple

+0

Das funktioniert gut für mich. Es muss etwas anderes geben, dass es auf dem Bildschirm bleibt. Ich habe während ViewDidLoad in der SceneKit-Vorlage eine Ansicht hinzugefügt und sie in der Methode handleTap entfernt, und alles funktioniert wie erwartet. – bjtitus

Antwort

1

Zuerst frage ich mich, welche Version von swift Sie verwenden.

self.view ist optional in 1.2 daher sollte Ihr Typ: self.view?.addSubview() wenn Sie swift zielen 1.2

ich in Swift 1.2 versucht haben

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() 
    } 
} 

Der obige Code funktioniert eine einfache Anwendung zu machen sehr gut. Ich kann von ein paar Gründe ein, Ihre Ansicht entfernt bekommen nicht

  1. Sind Sie sicher, dass removeContainerView tatsächlich genannt. Versuchen Sie, einen Unterbrechungspunkt zu bilden, um zu sehen, ob es
  2. genannt wird Wenn Sie Ihren SKView im Code eingerichtet haben, könnte etwas falsch eingerichtet worden sein.
  3. Ihre Subview ausgeplant oder etwas

wir debuggen Ihr Problem vollständig benötigen wird etwas mehr Code zu sehen.

Was wir brauchen, ist:

  1. Erklärung Ihrer subview
  2. Alle Funktionen, die removeContainerView nennen()

Noch besser wäre es, pastebin Ihre SKScene Klasse.

Verwandte Themen