這里使用 launchScreen 、.storyboard 文件創建啟動圖和引導頁。首次打開項目或者更新后第一次打開時展示引導頁,保存有用戶信息時進入首頁,否則進入登錄注冊頁面。
將 LaunchScreen.storyboard 文件上放入一個圖片。并添加約束,鋪滿整個頁面。為  LaunchScreen.storyboard 文件設置  Storyboard ID 。注意到文件的 Class 是 UIViewController 。    -    
在 AppDelegate 文件中設置啟動動畫。
在啟動時調用方法。必須要先設置 window?.makeKeyAndVisible() ,使 window 可用。否則后面使用 window時,始終為 nil 。
查看效果: 
如果想要在啟動圖上做些什么,譬如添加鏈接、倒計時等,創建 LaunchScreen 文件對應的 controller 代碼文件,然后設計開發。
暫時不考慮是否展示引導頁的問題,目前始終展示引導頁。創建引導頁 .storyboard 文件。關聯相關文件。關于 storyboard 文件中 UIScrollView 文件的使用,參考 Storyboard中的UIScrollView使用自動布局,使其能夠滾動 ,或者 史上最簡單的UIScrollView+Autolayout出坑指南。
關于具體的引導頁內部實現參考代碼,這里解釋下  AppDelegate 文件中的引導操作。首先暫時設置引導頁為 rootViewController ,否則動畫過渡期間會展示 Main.storyboard 下的頁面。其次, 延時加載動畫的目的是讓過渡更加自然些。
AppDelegate 擴展代碼:
效果: 
首先設置一些全局變量:
// 本地保存版本號public let kAppVersion = "appVersion"http:// 本地賬號public let kUserName = "userName"http:// 本地密碼public let kPassWord = "password"http:/// 從 Storyboard 中讀取 ViewController////// - Parameters:/// - name: SB name/// - identifier: VC identifier/// - Returns: need VCpublic func mViewControllerByStoryboard(sb name: String, vc identifier: String) -> UIViewController { return UIStoryboard(name: name, bundle: nil).instantiateViewController(withIdentifier: identifier)}/// 設置 UserDefaults 值的存取public func mUserDefaultsSetValue(_ value: Any, _ key: String) { UserDefaults.standard.set(value, forKey: key)}public func mUserDefaultsObject(_ key: String) -> Any? { return UserDefaults.standard.object(forKey: key)}判斷是否是第一次啟動或者版本更新:
/// 是否是首次登陸或者版本更新 /// /// - Returns: 判斷是否要展示引導頁 fileprivate func isFirstLaunchOrUpdated() -> Bool { // 獲取應用上次啟動時保存的版本號 let lastVersion = UserDefaults.standard.object(forKey: kAppVersion) as? String let currentVersion = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as? String if lastVersion == nil || lastVersion != currentVersion { // 未保存版本號或者已更新 UserDefaults.standard.set(currentVersion, forKey: kAppVersion) UserDefaults.standard.synchronize() return true } else { return false } }上面方法中 Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as? String  是從 info.plist 文件中讀取版本號。
通過這個方法,設置引導頁的展示。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { if isFirstLaunchOrUpdated() { // 首次打開或者更新后打開 window?.rootViewController = guideVC } else { // 已經打開過,然后判斷是否已經登錄過 if mUserDefaultsObject(kUserName) != nil && mUserDefaultsObject(kPassword) != nil { let mainVC = mViewControllerByStoryboard(sb: "Main", vc: "ViewController") window?.rootViewController = mainVC } else { let loginVC = mViewControllerByStoryboard(sb: "LoginAndRegister", vc: "LoginViewController") as! LoginViewController window?.rootViewController = loginVC } } window?.makeKeyAndVisible() setupLaunchImage() return true }并在展示引導頁的方法中加入判斷:
/// 展示引導頁 /// /// - Parameter animationAfter: 延時動畫時間 private func showGuidePage(_ animationAfter: TimeInterval) { // 判斷是否是首次啟動或者更新后啟動 guard isFirstLaunchOrUpdated() == true else { return } // 將引導頁設置為主頁面 let guideView = guideVC?.view window?.addSubview(guideView!) guideView?.alpha = 0.5 // 延時加載動畫 DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + animationAfter) { UIView.animate(withDuration: 1.0) { guideView?.alpha = 1.0 } } }更多細節參考源碼: Demo 下載
新聞熱點
疑難解答