2015-11-01 55 views
0

我創建了一個小遊戲(不與Sprite工具包),我有一個MenuViewController和一個GameViewController。完全刪除視圖控制器 - 斯威夫特

在我的GameViewController上,我有一個按鈕「MENU」進入菜單。我將這段代碼加入到GameViewController中:

print("test") 

它每秒鐘都會使用一個計時器執行。

當我按下「菜單」按鈕,我發現自己在菜單上,但定時器仍在運行。我認爲GameViewController沒有完全刪除,我該怎麼做?

PS:駁回GameViewController,我用這個:

func goToMenuViewController() { 

    let menuViewController = MenuViewController() 
    menuViewController.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve 
    self.presentViewController(menuViewController, animated: true, completion: nil) 

} 

編輯1

添加對我的應用程序層次中的相關信息:

當用戶啓動應用程序,他發現自己在MenuViewController。 這個ViewController上有一個播放按鈕,它可以連接到GameViewController。 在MenuViewController,有一個其他按鈕,這需要到RulesEditorViewController,允許修改的GameViewController

+0

你可以停在viewWillDisappear或viewDidDisappear方法計時器,並根據您的需求viewWillAppear中或viewDidAppear方法重新啓動它。 – Surely

+0

這不是問題,我設置了這個計時器來查看GameViewController是否被完全刪除。 – fredericdnd

+0

根據您提供的代碼,「GameViewController」不會被刪除,因爲它仍然存在於您的菜單視圖控制器下。另一件事,爲什麼你的'GameViewController'不會dealloc是一個計時器。您必須手動停止它以避免內存分配。 –

回答

1

你試試顯示辭退GameViewController是錯誤的規則。您正在創建新的Menu控制器並將其顯示在GameViewController之上。這就是爲什麼這個控制器仍然在應用程序內存中。

您必須使用此功能self.dismissViewControllerAnimated(true, completion: nil)self.navigationController?.popToRootViewControllerAnimated(true),具體取決於您的segue類型。

現在,如果你想訪問RulesEditorViewController你必須停止遊戲並離開這個控制器。但是如果你想在播放時修改選項,那麼如果你直接從GameViewController訪問RulesEditorViewController就好像你現在嘗試顯示Menu一樣。

更新: 首先,你應該瞭解視圖控制器的層次結構和方式如何呈現它。我相信本教程中的故事板示例將幫助您:http://www.raywenderlich.com/50308/storyboards-tutorial-in-ios-7-part-1

+0

我用'self.dismissViewControllerAnimated(true,completion:nil)'但它不起作用,當我編輯規則時,GameViewController中仍然存在舊規則:( – fredericdnd

+0

是你的'GameViewController '模式或導航控制器中嵌入? –

+0

對不起,我不明白我在iOS開發是新,你可以給我解釋一下這是什麼意思?我不你如何展示使用故事板,唯一的代碼。 – fredericdnd

1

您無法看到GameViewController是否以這種方式被移除。 如果你在GameViewController中使用了一個定時器,它會保留一個對GameViewController的引用,直到它停止執行。

順便說一句,現在的菜單視圖控制器不會使遊戲視圖控制器被刪除