使用UIView
的動畫過渡方法 transition(with:duration:options:animations:completion:)
來執(zhí)行視圖切換動畫:
kAppDelegate.window!:這里假設 kAppDelegate 是你的應用程序代理對象变屁,用來獲取應用程序的主窗口抖韩。使用感嘆號 (!) 表示強制解包郭毕,因為 window 的類型是 UIWindow? 可選類型奔坟,但我們假設這里不為 nil。
duration: 0.5:動畫持續(xù)時間為 0.5 秒。
options: .transitionCrossDissolve:動畫過渡效果為交叉淡入淡出,這意味著舊視圖會漸漸淡出咱娶,新視圖會漸漸淡入。
有前置聲明:
let kAppDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate
UIView.transition(with: kAppDelegate.window!, duration: 0.5, options: .transitionCrossDissolve, animations: {
let oldState = UIView.areAnimationsEnabled
UIView.setAnimationsEnabled(false)
kAppDelegate.window?.rootViewController = TabBarViewController()
kAppDelegate.window?.makeKeyAndVisible()
UIView.setAnimationsEnabled(oldState)
}, completion: nil)
-
let oldState = UIView.areAnimationsEnabled
:保存當前動畫狀態(tài)煎楣,即是否啟用了動畫豺总。 -
UIView.setAnimationsEnabled(false)
:將動畫狀態(tài)設置為false
,這會暫時禁用視圖的動畫效果择懂。 -
kAppDelegate.window?.rootViewController = TabBarViewController()
:設置應用程序主窗口的根視圖控制器為TabBarViewController()
的實例,這里假設TabBarViewController()
是你的標簽欄控制器另玖。
-kAppDelegate.window?.makeKeyAndVisible()
:確保應用程序主窗口可見并處于關鍵狀態(tài)困曙。 -
UIView.setAnimationsEnabled(oldState)
:恢復之前保存的動畫狀態(tài),這里會重新啟用視圖的動畫效果谦去。 -
completion: nil
:這里的 completion 塊為 nil滋迈,表示動畫完成后不執(zhí)行任何額外操作卸例。