У меня есть вопрос, пожалуйста. У меня возникли проблемы с переходами ViewController. Мой установочный код показан ниже:
Мой MainViewController такой:
override func viewDidLoad() {
super.viewDidLoad()
let screenSize: CGRect = UIScreen.main.bounds
//..positioning code
do {
AudioManager.sharedInstance.startNeonSignSound()
} catch {
print("couldn't load sound file")
}
if (entranceMusicOnceBool == false) {
audioManager.startEntranceMusic()
entranceMusicOnceBool = true
}
}
@IBAction func startButtonPressed(_ sender: UIButton) {
audioManager.stopEntranceMusic()
audioManager.startCampaignMusic()
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "GameVC") as! GameViewController
let appDelegate = (UIApplication.shared.delegate as! AppDelegate)
appDelegate.window?.rootViewController = newViewController
}
Затем в GameViewController:
var scene1: CampaignSelectScene?
//Campaign screen
override func viewDidLoad() {
super.viewDidLoad()
AudioManager.sharedInstance.startCampaignMusic()
self.view.frame = self.view.bounds
let view = self.view as! SKView
//Restores view to default
view.transform = origidentity
self.view.gestureRecognizers?.removeAll()
let screenSize = UIScreen.main.bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height
view.frame.size.height = screenHeight
view.frame.size.width = screenWidth
if (UIDevice.current.userInterfaceIdiom == .pad) {
scene1 = CampaignSelectScene(size: CGSize(width: 512, height: 909))
scene1!.scaleMode = .aspectFit
} else {
scene1 = CampaignSelectScene(size: CGSize(width: 375, height: 667))
scene1!.scaleMode = .aspectFit
}
view.ignoresSiblingOrder = true
// Present the scene
scene1?.viewController = self
view.showsFPS = true
view.showsNodeCount = true
let crossFade = SKTransition.crossFade(withDuration: 1.0)
view.presentScene(scene1!, transition: crossFade)
}
func returnToMainMenu() {
self.scene1 = nil
self.removeFromParent()
self.view = nil
self.removeGesture()
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "MainVC") as! MainViewController
let appDelegate = (UIApplication.shared.delegate as! AppDelegate)
appDelegate.window?.rootViewController = newViewController
}
Когда я вызываю returnToMainMenu, он вызывает Mainснова экран;то есть он работает, но после нажатия кнопки «Пуск» на главном экране (второй раз) и возврата к GameViewController он застревает, когда я хочу идти дальше в игровой сцене. Это как если бы вызов startButtonPressed дважды привинтил его
Я получаю следующие ошибки: "SKView: ignoreRenderSyncInLayoutSubviews - НЕТ. Вызов _renderSynchronouslyForTime без обработчика"
Может быть полезно упомянуть, что получаются те же ошибкипри первом запуске нажмите на GameViewController
Есть идеи?