[swift] Swift 앱에서 동적으로 런치 이미지를 변경하는 방법

iOS 앱을 개발할 때, 앱을 실행할 때 나타나는 런치 이미지는 사용자에게 앱을 로딩 중임을 알려주는 역할을 합니다. 기본적으로 앱 번들에 포함된 정적인 이미지를 사용하지만, 때로는 동적으로 런치 이미지를 변경해야 할 수도 있습니다. 이 글에서는 Swift를 사용하여 앱에서 동적으로 런치 이미지를 변경하는 방법을 알아보겠습니다.

1. 런치 이미지 뷰 추가하기

우선 앱의 런치 이미지를 표시할 뷰를 추가해야 합니다. 이 뷰는 앱이 실행되는 동안 첫 화면에 나타날 것입니다. 스토리보드 또는 코드로 직접 추가할 수 있으며, 간단한 예제를 위해 코드로 추가하는 방법을 살펴보겠습니다.

import UIKit

class LaunchViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // 화면에 나타날 런치 이미지 뷰 생성
        let launchImageView = UIImageView(frame: UIScreen.main.bounds)
        launchImageView.image = UIImage(named: "launch_image")
        launchImageView.contentMode = .scaleAspectFill
        
        // 런치 이미지 뷰를 현재 뷰 컨트롤러의 최상위에 추가
        view.addSubview(launchImageView)
    }

}

위의 코드는 LaunchViewController라는 뷰 컨트롤러를 생성하고, viewDidLoad() 메서드에서 런치 이미지를 표시할 UIImageView를 생성하고 추가하는 과정을 담고 있습니다. launch_image는 앱 번들에 포함된 이미지 파일의 이름이며, 필요에 따라 이미지 파일의 경로를 수정해야 할 수도 있습니다.

2. 앱 델리게이트에서 런치 이미지 뷰 관리하기

이제 앱 델리게이트에서 앱 실행 중에 런치 이미지 뷰를 관리하는 코드를 추가해야 합니다. 앱 델리게이트는 앱의 생명주기를 관리하는 중요한 역할을 합니다. 코드를 추가하기 위해 AppDelegate.swift 파일을 열고 다음과 같이 수정해주세요.

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var launchViewController: LaunchViewController?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 런치 이미지 뷰 생성
        let launchViewController = LaunchViewController()
        self.launchViewController = launchViewController
        
        // 루트 뷰 컨트롤러로 설정
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.rootViewController = launchViewController
        window?.makeKeyAndVisible()
        
        // 필요한 데이터나 작업 로드
        loadAppData()
        
        // 앱 실행이 완료되면 런치 이미지 뷰를 제거하고 메인 뷰로 전환
        DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
            self.launchViewController?.view.removeFromSuperview()
            self.launchViewController = nil
            self.showMainView()
        }
        
        return true
    }

    func showMainView() {
        // 메인 뷰로 전환하는 로직 구현
        // ...
    }
    
    func loadAppData() {
        // 필요한 데이터나 작업을 로드하는 로직 구현
        // ...
    }

    // 다른 앱 생명주기 관련 코드들...
    
}

위의 코드에서 AppDelegate 클래스는 UIApplicationDelegate 프로토콜을 채택하고 있으며, 앱이 실행될 때 application(_:didFinishLaunchingWithOptions:) 메서드가 호출됩니다. 이 메서드에서는 런치 이미지 뷰를 만들고, 루트 뷰 컨트롤러로 설정하여 앱 실행 중에 런치 이미지 뷰가 표시되도록 합니다.

loadAppData() 메서드는 앱이 필요한 데이터나 작업을 로드하는 로직을 구현할 수 있는 메서드입니다. 이 메서드를 사용하여 앱 실행 중에 필요한 초기화 작업을 수행할 수 있습니다.

마지막으로, DispatchQueue.main.asyncAfter() 메서드를 사용하여 앱 실행이 완료된 후 일정 시간(예: 3초)이 지난 뒤에 launchViewController를 제거하고 메인 뷰로 전환하는 로직을 구현하였습니다.

이제 앱을 실행하면 앱 실행 중에 동적으로 변경된 런치 이미지를 확인할 수 있습니다.

마무리

이번 글에서는 Swift를 사용하여 앱에서 동적으로 런치 이미지를 변경하는 방법을 알아보았습니다. 런치 이미지를 동적으로 변경하는 경우, 앱 실행 중에 추가 작업이 필요할 수 있으므로 알맞은 타이밍과 방법을 선택하여 구현해야 합니다. 앱의 초기화 작업이나 데이터 로딩 등을 적절히 처리하면서, 사용자에게 보다 동적이고 재미있는 경험을 제공할 수 있습니다.

참고 자료