2014-12-22 33 views
5

Oyunumda bir duraklatma ekranı oluşturmaya çalışıyorum. Ben storyboard kimliği ile benim storyboard bir 'PauseScreen' viewController eklemiş ve Restorasyon Kimliği "PauseScreenID" olarak ayarlanır ve "GameScene" fonksiyonu oluşturduk olan duraklama ekrana taşımak için: Ancak zamanPencere hiyerarşisine bir görünüm ekleme

func pauseSceenTransition(){ 

    let viewController = UIStoryboard(name: "Main", bundle:nil).instantiateViewControllerWithIdentifier("PauseScreenID") as UIViewController 

    let currentViewController = (UIApplication.sharedApplication().delegate as AppDelegate) 

    currentViewController.window?.rootViewController?.presentViewController(viewController, animated: false, completion: nil) 
} 

o çağrılan, ben hata alıyorum:

Uyarı: 0x7fae61f79980> kimin görünüm penceresi hiyerarşisinde değil: < AppName .StartScreenViewController üzerinde 0x7fae61fe5ff0>: < AppName .PauseScreen sunmak girişimi!

"StartScreenViewController", başlangıç ​​ekranım için görünüm denetleyicisidir ve ilk görüntüleme denetleyicisidir. Daha sonra "PauseScreen" inin gitmesi gereken "GameScene" e gider. böylece

let currentViewController = (UIApplication.sharedApplication().delegate as AppDelegate) 

o "GameViewController" konulu "PauseScreen" sunmak olduğunu: Ben ikinci satırı değiştirmek gerektiğini tahmin yüzden ilk görünüm denetleyicisi "GameViewController"/"GameScene" kurarsın çalışır , "StartScreenViewController" üzerinde değil ama nasıl yapacağından emin değilim.

cevap

11

Hata, tam olarak neler olduğunu anlatıyor.

Warning: Attempt to present <AppName.PauseScreen: 0x7fae61fe5ff0> on <AppName.StartScreenViewController: 0x7fae61f79980> whose view is not in the window hierarchy!

(UIApplication.sharedApplication().delegate as AppDelegate).window?.rootViewControllerStartScreenViewController örneğine işaret ediyor. Bu kötü: rootViewController, GameScene örneğini işaret etmelidir.

Kök neden, GameScene'un nasıl sunulduğunu göstermelidir. açıklamanızda Gönderen: ...

"StartScreenViewController" ... görünüm denetleyicisi olan Ardından "GameScene" gider

senin sorunun yer olmalı. StartScreenViewController'dan GameScene'a nasıl gidiyorsunuz?

Tahminimce, uygulamaya yeni bir pencere ekliyorsunuz. Bunun yerine rootViewController'u ayarlamanız gerekir.

let gameScene = UIStoryboard(name: "Main", bundle:nil).instantiateViewControllerWithIdentifier("GameSceneID") as UIViewController 
let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) 
appDelegate.window?.rootViewController = gameScene 

geri başlangıç ​​ekranına dönmek

, yeniden rootViewController ayarlayın.

let initialViewController = UIStoryboard(name: "Main", bundle:nil).instantiateInitialViewController() as UIViewController 
let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) 
appDelegate.window?.rootViewController = initialViewController 

Kök görünüm denetleyicisi ayarı hareketlendirmek için transitionFromViewController(,toViewController:, duration:, options:, animations:, completion:) kullanabilirsiniz.

+0

Merhaba, Şu anda aynı sorunla ilgili sorun yaşıyorum ve çözümlerin geçen yıl bir buçukta değişip değişmediğini merak ediyorum. Bir düğmenin içinde 'iç içe' içinden 'UIAlertController' çağırmaya çalışıyorum. Düğmedeki normal "if" ifadeleri, "UIAlertView" ın ince, ancak ifadelerin aynı hatayı yukarıdaki gibi atması durumunda bunların "doğru" sonuçlarını gösterir. – Ethan

+0

@Ethan Bazen, bir "UIAlertController" öğesini koymak için bir pencere oluşturmanız gerekir: http: // stackoverflow.com/questions/26554894/nasıl yapılır-uialertcontroller-ne zaman-in-a-view-denetleyici –

+0

Bu konuda bildiğiniz her şey hızlı yazılır mı? – Ethan

İlgili konular