Ios Swift:更改ViewController时:前一个不会';不要拒绝
说到UIKit和ViewController,我是个傻瓜。我正在尝试从Ios Swift:更改ViewController时:前一个不会';不要拒绝,ios,swift,uiviewcontroller,sprite-kit,uikit,Ios,Swift,Uiviewcontroller,Sprite Kit,Uikit,说到UIKit和ViewController,我是个傻瓜。我正在尝试从SplashScreenViewController切换到GameViewController,这是一个SKView。GameViewController加载正常,因为我可以听到游戏音乐开始,但是SplashScreenController从未从屏幕上消失。所以基本上我有SplashScreenController停留在屏幕上,我可以听到GameViewController在后台启动。我做错了什么 这是ScreenView控制
SplashScreenViewController
切换到GameViewController
,这是一个SKView。GameViewController加载正常,因为我可以听到游戏音乐开始,但是SplashScreenController
从未从屏幕上消失。所以基本上我有SplashScreenController
停留在屏幕上,我可以听到GameViewController
在后台启动。我做错了什么
这是ScreenView控制器的代码:
class SplashScreenViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor(red: 46/255, green: 83/255, blue: 160/255, alpha: 1.0)
let image : UIImage = UIImage(named:"splashScreen.png")!
let bgImage = UIImageView(image: image)
bgImage.frame = CGRect(origin: CGPoint(x: 3,y: -3), size: CGSize(width: self.view.frame.size.width, height: self.view.frame.size.height))
self.view.addSubview(bgImage)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "GameViewController")
self.present(controller, animated: true, completion: nil)
self.dismiss(animated: true, completion: nil)
}
deinit {
print("Object with name SplashScreenViewController is being released")
}
}
据我所知,您想用您的
GameViewController
替换SplashScreenViewController
。您当前的代码正在以模式和直接方式显示GameViewController
,然后将其取消。因此,不会显示新的视图控制器
代码中的另一个问题是缺少计时间隔,当前启动屏幕已初始化,之后如果代码正常工作,它将被GameViewController
替换,因此您将只看到GameViewController
class SplashScreenViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor(red: 46/255, green: 83/255, blue: 160/255, alpha: 1.0)
let image : UIImage = UIImage(named:"splashScreen.png")!
let bgImage = UIImageView(image: image)
bgImage.frame = CGRect(origin: CGPoint(x: 3,y: -3), size: CGSize(width: self.view.frame.size.width, height: self.view.frame.size.height))
self.view.addSubview(bgImage)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "GameViewController")
// Here we create a dispatch queue to do some other code after an amount of time. In this case, one second.
let dispatchTime = DispatchTime.now() + .seconds(1)
DispatchQueue.main.asyncAfter(deadline: dispatchTime) {
self.navigationController?.setViewControllers([controller!], animated: false)
}
}
}
此设置将在1秒后用GameViewController替换SplashScreenViewController。要使其正常工作,以及基本上所有视图控制器之间的导航,必须将第一个视图控制器包装到UINavigationController
中 您可以将窗口设置为用游戏屏幕替换初始屏幕。
代码如下所示
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window!.rootViewController = gameViewController
这很简单,请在dismissViewController方法完成时向nextviewcontroller演示。这是一个有趣的想法,但我想只有在
SplashScreenViewController
被解除后,如果剩下一个视图控制器,它才会起作用。