비전공자 개발일기

LaunchScreen(Basic + Custom) & sleep 본문

SWIFT

LaunchScreen(Basic + Custom) & sleep

HiroDaegu 2023. 1. 2. 20:47
728x90
SMALL

LaunchScreen.storyboard

 

앱이 실행될 때 가장 먼저 화면에 나타나도록 설정된 화면

-> main이 노출되기 전에 잠시 나타나는 화면

 

주의 사항

UIKit만 사용해야 함
단 하나의 UIView or UIViewController 객체만 사용해야 함
Action, Outlet 사용 불가
UIWebView 사용 불가
커스텀 클래스 불가
런타임 속성 사용 불가

LaunchScreen 시간 조절법 -> Sleep(Int)

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        sleep(3) 
        return true
    }

Custom LauchScreen (Animation, and so on)

1. 새로운 스토리보드 생성

2. 새로운 뷰컨트롤 생성 후 1번에서 만든 스토리보드에 설정

import UIKit

class SplashViewController: UIViewController {

   @IBOutlet weak var splashIcon: UIImageView! // 추가한 이미지를 컨트롤을 누른채 좌클릭하여 스크립트에 드래그하여 Outlet으로 연결합니다. 추가한 이미지를 의미합니다.
    
   override func viewDidLoad() {
        super.viewDidLoad()
   }

}

3. 애니메이션 설정

 UIView.animate(
        withDuration: <TimeInterval>, // 애니메이션이 재생되는 시간
        delay: <TimeInterval>, 		  // 지연시간
        options: <#UIView.AnimationOptions>, // 애니메이션 설정
        animations: <() -> Void>, 			// 실행될 애니메이션
        completion: <((Bool) -> Void)?((Bool) -> Void)?(Bool) // 애니메이션 종료 후 실행될 코드
        -> Void
                )
import UIKit

class SplashViewController: UIViewController {

    @IBOutlet weak var splashIcon: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.splashIcon.alpha = 0 // opacity 0
        UIView.animate(withDuration: 1.0, delay: 1.5, options: .curveEaseOut, animations: {
               // 동작할 애니메이션
                print("애니메이션 실행!")
                self.splashIcon.alpha = 1 // opacity 1
                }, completion: nil)
    }
}

4. SceneDelegate.swift 수정

    var window: UIWindow?
  
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // initialViewController를 SplashViewController로 코드를 이용하여 변경. 제일 처음 등장하는 화면이 Splash가 된다.
        // 스토리보드 찾기
        let storyboard = UIStoryboard(name: "Splash", bundle: nil)
        let initialViewController = storyboard.instantiateViewController(withIdentifier: "SplashViewController")
        // rootViewController 설정하기
        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()
          
        guard let _ = (scene as? UIWindowScene) else { return }
    }

5. LaunchScreen 종료 후 Main으로 이동시키기

-> Main.storyboard의 Identify - Storyboard ID를 설정( ex) Main)

UIView.animate(withDuration: 1.0, delay: 1.5, options: .curveEaseOut, animations: {
              // 동작할 애니메이션에 대한 코드
              print("애니메이션 실행!")
              self.splashIcon.alpha = 1
              }, completion: { finished in
                  // 애니메이션이 종료되었을 때의 코드
                  let Storyboard = UIStoryboard.init(name: "Main", bundle: nil)
                  guard let VC = Storyboard.instantiateViewController(identifier: "Main") as? ViewController else { return }
                  VC.modalPresentationStyle = .fullScreen // 풀스크린으로 설정
                  self.present(VC, animated: false, completion: nil) 
                  // 뷰가 등장하는 애니메이션 효과인 animated는 false로 설정
              })
728x90
LIST

'SWIFT' 카테고리의 다른 글

앱 등록 절차  (0) 2023.01.08
App Icon  (0) 2023.01.02
Covid-19 Vaccination Center (SwiftUI, Combine, OpenAPI)  (0) 2022.12.31
Beer List (PunkAPI, Postman, GCD, URLSession)  (0) 2022.12.30
Netflix Style Main Display  (0) 2022.12.27