经过一番谷歌搜索后,我发现弄乱默认的 Xcode 启动屏幕并不是让你的闪屏等待一段时间和其他东西的最正确方法,所以我将新的视图控制器(名为splash的自定义类)添加到我的故事板中,然后在2 秒后它将显示我的主屏幕
UINavigationController
并且它不起作用,只是冻结在启动屏幕上
这是我的代码:
import UIKit
class splash: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NSThread.sleepForTimeInterval(2.0)
let vc = storyboard?.instantiateViewControllerWithIdentifier("mainmenu") as! UINavigationController
self.presentViewController(vc, animated: true, completion: nil)
}
}
我已经使用执行选择器解决了它
class splash: UIViewController {
override func viewDidLoad() {
super . viewDidLoad()
performSelector(#selector(splash.showmainmenu), withObject: nil, afterDelay: 2)
}
func showmainmenu(){
performSegueWithIdentifier("mainmenu", sender: self)
}
你想做什么 - 是一个丑陋的黑客行为。 不要。
您应该创建自定义的
Splash View Controller
,其布局模仿您的默认启动屏幕图像,执行自定义动画(如果有),然后推送/呈现下一个视图控制器(在主线程上),或者根据您的应用程序执行您想要执行的任何操作要求。
创建一个新的 Swift 文件:在 Xcode 项目中,右键单击项目导航器中的项目文件夹,然后选择“从模板新建文件”->“Cocoa Touch 类”。将其命名为“SplashVC.swift”。
更新您的 AppDelegate.swift
@主要 AppDelegate 类:UIResponder、UIApplicationDelegate {
var window: UIWindow?
private let navigationController = UINavigationController()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
goToSplashScreen()
return true
}
private func goToSplashScreen() {
let splashViewController = SplashVC(nibName: "SplashVC", bundle: nil)
navigationController.setViewControllers([splashViewController], animated: false)
}
}