반응형
info.plist
Launch screen interface file base name 키 추가
Value에 LaunchScreen 입력.
우리가 흔히 쓰는 application(_:didFinishLaunchingWithOptions:) 메서드가 바로 launch screen과 함께 앱이 로딩될 때 실행되는 구문으로, 앱이 시작되는 순간 필요한 initialization code 들을 이 메서드 안에 작성할 수 있다.
Launch Screen 디스플레이 시간 조정
Thread.sleep(forTimeInterval: 3.0)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
...
sleep(1)
return true
}
위와같은 방법은 앱 자체를 딜레이 시키므로 좋지 않다.
따라서 다음과 같이 DispatchQueue를 이용하여 비동기로 뷰컨트롤러를 실행시키는 것이 죠음.
DispatchQueue.main.async {
self.requestServerStauts()
self.moveVC(nibName: "AnimationLaunchScreenViewController")
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
self.moveVC(nibName: "WebViewController")
}
}
AppDelegate에서 작업할 경우
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = UIStoryboard(name: "LaunchScreen", bundle: nil).instantiateInitialViewController()
window?.makeKeyAndVisible()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()
}
return true
}
SceneDelegate에서 작업할 경우
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
window?.rootViewController = UIStoryboard(name: "LaunchScreen", bundle: nil).instantiateInitialViewController()
window?.makeKeyAndVisible()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()
}
guard let _ = (scene as? UIWindowScene) else { return }
}
+ LaunchScreen 실행 후 UINavigationController로 넘겨줄 때는 다음과 같이 적용할 수 있다.
window?.rootViewController = UIStoryboard(name: "LaunchScreen", bundle: nil).instantiateInitialViewController()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1.4) {
let vc = WebViewController(nibName: "ViewController", bundle: nil)
let navigationController = UINavigationController(rootViewController: vc)
navigationController.navigationBar.isHidden = true
self.window?.rootViewController = navigationController
//self.moveVC(xibName: "ViewController")
}
return true
혹은
func moveVC(nibName : String) {
if nibName == "WebViewController" {
let webVC = WebViewController(nibName: nibName, bundle: nil)
let navigationController = UINavigationController(rootViewController: webVC)
navigationController.navigationBar.isHidden = true
self.window?.rootViewController = navigationController
} else if nibName == "LaunchScreen" {
self.window?.rootViewController = UIStoryboard(name: nibName, bundle: nil).instantiateInitialViewController()
}
self.window?.makeKeyAndVisible()
}
이런식으로 함수를 선언해두고 didFinishLaunchingWithOptions에서 다음과 같이 사용할 수도 있다.
self.moveVC(nibName: "LaunchScreen")
DispatchQueue.main.asyncAfter(deadline: .now() + 1.7) {
self.moveVC(nibName: "WebViewController")
}
참고 : Soda_앱의 시작화면, StackOverflow_How to delay launch screen,
728x90
반응형
'Swift iOS 앱 개발 > Swift' 카테고리의 다른 글
[Swift iOS] swift codable null handling (0) | 2021.06.24 |
---|---|
[Swift iOS] 검색기능구현 - 문자열 탐색 NSString.CompareOptions (0) | 2021.06.22 |
[Swift iOS] How to detect app entering foreground / background (0) | 2021.06.16 |
[Swift iOS] UITableView scrollToRow 특정 인덱스로 이동 (0) | 2021.06.01 |
[Swift iOS] sort JSON Array : JSON 데이터 배열 정렬하기 (0) | 2021.05.31 |