問題
SKScene
が下位層にあるViewController
から別のViewController
へ画面推移するとSKScene
が裏で稼働したまま、推移後の画面に移ってしまいます。
やりたいこと
画面推移が完了すると、SKScene
の活動を停止したい。
コード
swift
1//ViewController 2 3 //ResultViewControllerとTestViewControllerは別々のswiftファイルに書いてあります。 4 //可読性を高めるために分けずに記入してあります。 5class ResultViewController: UIViewController { 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 } 10} 11 12class TestViewController: UIViewController, ChangeViewDelegate { 13 14 let mainSKView = MainSKView() 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 19 mainSKView.chageViewDlgt = self 20 self.view.addSubview(mainSKView) 21 22 //mainSKViewの位置等の細かい設定は省略しました。 23 } 24 func changeView(){ 25 let resultViewController = self.storyboard?.instantiateViewController(withIdentifier: "ResultViewController") as! ResultViewController 26 self.present(resultViewController, animated: true, completion: nil) 27 28 } 29}
swift
1// SKView 2protocol MainSKViewDelegate { 3 func reloadScore(score: Int) 4 func setResultView(result: Bool) 5} 6 7protocol ChangeViewDelegate { 8 func changeView() 9} 10 11class MainSKView: SKView, MainSKViewDelegate { 12 13 var mainGameScene: MainGameScene? 14 var chageViewDlgt: ChangeViewDelegate? 15 16 override init(frame: CGRect) { 17 super.init(frame: frame) 18 19 if let scene = SKScene(fileNamed: "MainGameScene") { 20 21 mainGameScene = scene as? MainGameScene 22 mainGameScene?.mainSKViewDlgt = self 23 scene.scaleMode = .aspectFill 24 self.presentScene(scene) 25 } 26 } 27 28 func setResultView(result: Bool) { 29 if result { chageViewDlgt?.changeView() } 30 } 31 32 required init?(coder: NSCoder) { 33 fatalError("init(coder:) has not been implemented") 34 } 35}
swift
1//SKScene 2 3class MainGameScene: SKScene { 4 5 var timer: Timer? 6 var time: Int = 0 7 var mainSKViewDlgt: MainSKViewDelegate? 8 9 override func didMove(to view: SKView) { 10 11 setTimer() 12 } 13 14 private func setTimer() { 15 timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { _ in self.setting() 16 }) 17 } 18 19 private func setting() { 20 time += 1 21 print("\(time)")// 画面推移後もこのprint()がプリントされ続けてしまう 22 23 if time == 5 { 24 mainSKViewDlgt?.setResultView(result: true) 25 } 26 } 27}
補足
不要だと判断したコードを勝手に省略したので、要所要所おかしな部分がありますが、本来のコードは正しく稼働します。
質問内容の修正が必要な場合はお申し付けください。即座に対応いたします。
この問題を解決できる方法をご存知の方、何卒ご教授ください。
宜しくお願いします。
ただNotificationを使ってTestViewControllerにchangeViewを呼ばせればいいのでは?
回答1件
あなたの回答
tips
プレビュー