【发布时间】:2014-12-15 18:41:43
【问题描述】:
我正在使用当前有两个视图控制器的 Swift 在 SpriteKit 中制作游戏。第一个 viewController 是 GameViewController,它使用情节提要在界面构建器中显示带有一些按钮的菜单。菜单上有一个播放按钮,可以转换到显示 gameScene 的第二个 viewController。两个 viewController 都加载一个 SKScene。
要从一个视图控制器转换到另一个并返回,我使用的是在情节提要中创建的 segues。
我遇到的问题是,当我在视图控制器之间切换时内存会增加,导致应用程序最终崩溃。我有一种感觉 viewControllers 只是相互堆叠。这是我的 GameViewController 和 GameSceneViewController 代码。
游戏视图控制器:
class GameViewController: UIViewController, GKGameCenterControllerDelegate {
//MARK: Variables
var scene: Menu!
@IBOutlet weak var settingsBtn: UIButton!
@IBOutlet weak var leaderboardsBtn: UIButton!
@IBOutlet weak var storeBtn: UIButton!
@IBOutlet weak var playBtn: UIButton!
@IBAction func play(sender: UIButton) {
}
//MARK: Button Animations
func menuButtonAnimations(){
settingsBtn.transform = CGAffineTransformMakeTranslation(0, 200)
leaderboardsBtn.transform = CGAffineTransformMakeTranslation(0, 200)
storeBtn.transform = CGAffineTransformMakeTranslation(0, 200)
springWithDelay(0.5, 0.7, {
self.settingsBtn.transform = CGAffineTransformMakeTranslation(0, 0)
})
springWithDelay(0.5, 0.75, {
self.leaderboardsBtn.transform = CGAffineTransformMakeTranslation(0, 0)
})
springWithDelay(0.5, 0.8, {
self.storeBtn.transform = CGAffineTransformMakeTranslation(0, 0)
})
}
//MARK: The View
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// Configure the view.
let skView = self.view as SKView
skView.showsFPS = false
skView.showsNodeCount = false
skView.showsPhysics = false
skView.ignoresSiblingOrder = true
scene = Menu(size: skView.bounds.size)
scene.scaleMode = .AspectFill
skView.presentScene(scene)
//Button Animation
menuButtonAnimations()
}
//MARK: Extra Stuff
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> Int {
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue)
} else {
return Int(UIInterfaceOrientationMask.All.rawValue)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Release any cached data, images, etc that aren't in use.
}
override func prefersStatusBarHidden() -> Bool {
return true
}
}
GameSceneViewController:
class GameSceneViewController: UIViewController{
//MARK: Variables
@IBOutlet weak var returnBtn: UIButton!
//MARK: Helper Functions
//MARK: The View
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// Configure the view.
var scene: GameScene!
let skView = self.view as SKView
skView.showsFPS = false
skView.showsNodeCount = false
skView.showsPhysics = false
skView.ignoresSiblingOrder = true
scene = GameScene(size: skView.bounds.size)
scene.scaleMode = .AspectFill
skView.presentScene(scene)
//Notifications
}
转场都是使用故事板中的链接创建的模态转场。
任何关于如何在不不断增加内存的情况下在两个视图控制器之间来回转换的帮助都会很棒!
【问题讨论】:
标签: ios swift uiviewcontroller sprite-kit