Entlässt mehr als ein view-controller gleichzeitig

Mache ich ein Spiel mit SpriteKit.
Ich habe 3 viewControllers: Auswahl der Ebene vc-Spiel vc, und gewinnen Sie vc.
Nachdem das Spiel vorbei ist, möchte ich zeigen, die gewinnen, vc, danach, wenn ich drücken Sie die Taste OK auf der win-vc, ich möchte zu entlassen, der Gewinn-vc UND das Spiel vc (pop zwei view-Controllern aus dem stack). Aber ich weiß nicht, wie es zu tun, weil wenn ich Anruf

self.dismissViewControllerAnimated(true, completion: {})    

den Sieg vc (top of stack) wird abgewiesen, so dass ich nicht weiß, wo man es nennen, wieder zu entlassen, das Spiel vc.
Gibt es eine Möglichkeit, ich kann dieses Problem beheben, ohne mit der navigation-controller?

Dies ist der 1. VC: (Bitte achten Sie auf meine Kommentare unten, beginnend mit "//")

class SelectLevelViewController: UIViewController { //I implemented a UIButton on its storyboard, and its segue shows GameViewController
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

Dies ist die 2. VC:

class GameViewController: UIViewController, UIPopoverPresentationControllerDelegate {
    var scene: GameScene!
    var stage: Stage!

    var startTime = NSTimeInterval()
    var timer = NSTimer()
    var seconds: Double = 0
    var timeStopped = false

    var score = 0

    @IBOutlet weak var targetLabel: UILabel!
    @IBOutlet var displayTimeLabel: UILabel!
    @IBOutlet weak var scoreLabel: UILabel!
    @IBOutlet weak var gameOverPanel: UIImageView!
    @IBOutlet weak var shuffleButton: UIButton!
    @IBOutlet weak var msNum: UILabel!

    var mapNum = Int()
    var stageNum = Int()

    var tapGestureRecognizer: UITapGestureRecognizer!

    override func viewDidLoad() {
        super.viewDidLoad()

        let skView = view as! SKView
        skView.multipleTouchEnabled = false

        scene = GameScene(size: skView.bounds.size)
        scene.scaleMode = .AspectFill
        msNum.text = "\(mapNum) - \(stageNum)"

        stage = Stage(filename: "Map_0_Stage_1")
        scene.stage = stage
        scene.addTiles()
        scene.swipeHandler = handleSwipe

        gameOverPanel.hidden = true
        shuffleButton.hidden = true

        skView.presentScene(scene)

        Sound.backgroundMusic.play()

        beginGame()
    }

    func beginGame() {
        displayTimeLabel.text = String(format: "%ld", stage.maximumTime)
        score = 0
        updateLabels()

        stage.resetComboMultiplier()

        scene.animateBeginGame() {
            self.shuffleButton.hidden = false
        }

        shuffle()

        startTiming()
    }

    func showWin() {
        gameOverPanel.hidden = false
        scene.userInteractionEnabled = false
        shuffleButton.hidden = true

        scene.animateGameOver() {
            self.tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "hideWin")
            self.view.addGestureRecognizer(self.tapGestureRecognizer)
        }
    }

    func hideWin() {
        view.removeGestureRecognizer(tapGestureRecognizer)
        tapGestureRecognizer = nil

        gameOverPanel.hidden = true
        scene.userInteractionEnabled = true

        self.performSegueWithIdentifier("win", sender: self) //this segue shows WinVC but idk where to dismiss this GameVC after WinVC gets dismissed...
    }

    func shuffle() {...}
    func startTiming() {...}
}

- Und dies ist das 3. VC:

class WinVC: UIViewController {

    @IBOutlet weak var awardResult: UILabel!

    @IBAction func dismissVC(sender: UIButton) {
        self.dismissViewControllerAnimated(true, completion: {}) //dismissing WinVC here when this button is clicked
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}
Mehr generische Art und Weise zu entlassen, mehr als einen modalen view-Controller ist hier

InformationsquelleAutor minsanity | 2015-06-22

Schreibe einen Kommentar