티스토리 뷰
Launch Screen
런치 스크린(Launch Screen)이란?
공식문서에 아래와 같이 정의 되어있다.
- 앱이 시작할 때 즉시 나타나고 앱의 첫 번째 화면으로 빠르게 교체되는 화면으로 앱이 빠르고 반응이 좋다는 인상을 줄 수 있다고 한다.
- 앱의 데이터를 로딩하는 동안 빈 화면을 보여주지 않기 위해 나타내는 화면으로 표현될 수도 있다.
- 앱의 아이덴티티를 나타낼 수 있는 화면이기도 하다.
- 앱만의 아이콘, 이미지를 이용해 유저에게 강한 인상을 심어줄 수 있다.
- iOS에서는 launch Screen, 안드로이드 에서는 splash라는 표현을 쓰는것 같다.
런치스크린을 만들때는 다음과 같은 지침을 따라야한다.
- UIKit만을 사용해야 한다.
- 단 하나의 UIView나 UIViewController 객체만을 사용해야 한다.
- 액션, 아울렛과 같은 코드를 연결하면 안된다.
- UIWebView를 사용하면 안된다.
- 사용자정의 클래스를 사용하면 안된다.
- 런타임 속성을 사용하면 안된다.
- 위와 같이 apple에서는 런치스크린을 사용할때 지켜야할 지침을 명시해두었는데, 런치 스크린에서는 최소한의 동작만 하도록 하길 바란다고 느꼈다.
- (앱 실행시 초기 잠깐 나오는 화면이니 앱 아이콘, 이미지 같은 하나의 ImageView만 포함하는것이 좋다고 한다.)
Hig의 LaunchScreen에서는 다음과 같이 주의점도 명시되어 있다.
- 런치 스크린 디자인 시 기기의 다크모드에서의 런치스크린 확인해야한다.
- 앱 첫화면과 유사한 런치스크린을 만들 어야한다.
- 런치스크린에 텍스트를 넣지 않는다.(지역화 안된다.)
- 광고 넣으면 안된다.
스토리보드로 런치 스크린을 만들어보자!
프로젝트를 생성하게 되면 다음과 같이 LaunchScreen.storyboard
파일이 존재하는데 이녀석으로 만들어 주면된다!
이번 프로젝트에 적용하기 위해서 다음과 같이 만들어줬다!
하지만 요렇게 만들어 두기만하면 앱을 실행했을때 아주 잠깐 런치스크린이 보였다가 금방 사라진다.
앱 시작에 필요한 데이터 로딩이 완료되면 런치 스크린이 종료되기 때문이다.
(쫌더 오래 보여줬으면 좋겠는데 말이지...)
그럼 다음으로는 런치스크린이 좀더 오래 화면에 노출되도록 해보자!
런치 스크린 시간 조절하기
런치 스크린의 노출 시간을 늘리기 위해서는 AppDelegate의 application(_:didFinishLaunchingWithOptions:)
를 사용할수 있다.
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
) -> Bool {
return true
}
해당 메서드는 앱을 실행할 준비가 완료되면 시스템이 내부적으로 자동으로 호출해주는 메서드로 pushNotification(푸쉬알림)을 사용할때도 사용되는 메서드다.
요녀석은 Bool값을 반환하는 메서드인데 앱이 URL 리소스를 처리하거나 사용자 활동을 계속 할 수 없으면 flase, 그렇지 않으면 true를 반환한다고 한다.
푸쉬알림으로 앱이 실행된다면 반환값은 무시된다!
그렇다면 요녀석은 true를 반환하게끔 하고 이곳에 지연 로직을 넣게되면 launch 프로세스가 지연된다는 의미이기 때문에 런치 스크린 시간을 조절할수 있게 된다.
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
) -> Bool {
Thread.sleep(forTimeInterval: 1.5)
return true
}
- 요렇게 지연 로직을 넣어두면 1.5초간 런치스크린이 노출되게 된다.
참고한 자료및 문서
Specifying Your App’s Launch Screen
HIG_Launching
application(_:didFinishLaunchingWithOptions:)
'iOS > iOS-Memo' 카테고리의 다른 글
애플 로그인 구현하기 (Sign in with Apple) (0) | 2022.11.16 |
---|---|
APIKey를 숨겨보자! (0) | 2022.10.09 |
Cache, NSCache, URLCache (1) | 2022.09.30 |
Underline SegmanetControl (0) | 2022.08.12 |
NotificationCenter, Modal 사용시 주의점! (0) | 2022.04.29 |