VesselWheel

programmatic UI 프로젝트 구성하기(feat. xcode) 본문

Xcode Study

programmatic UI 프로젝트 구성하기(feat. xcode)

JasonYang 2024. 1. 26. 08:05

UIKit

Code로 쓰는 UI

장점

  1. 유지보수 용이성: 코드로 UI를 작성하면 코드의 버전 관리 및 수정이 용이하며, 코드베이스를 유지 비용이 적습니다. Git과 같은 버전 관리 도구를 활용하여 협업 시 코드 변경을 효과적으로 관리할 수 있습니다.
  2. 동적인 UI 작성: 코드로 UI를 구성하면 런타임에 동적으로 UI를 변경하거나 조작하기 용이하며, 복잡한 UI 로직을 더 쉽게 구현할 수 있습니다. (버튼에 따른 UI 이동 등을 구현하기 용이합니다.)
  3. 분업 용이성: 개발자가 각자의 역할(디자인 구현, 비즈니스 로직 구현 등)에 집중할 수 있으며, 작업 분담이 용이합니다.

단점

  1. 시각화 어려움: UI의 구성 요소를 코드로 작성하면 디자인을 미리 시각적으로 확인하기 어렵습니다. 디자이너가 실시간으로 디자인을 확인하기 어려울 수 있습니다.
  2. 학습 곡선: 코드로 UI를 작성하는 데는 시간이 걸리며, 초기에는 Storyboard보다 학습 곡선이 높을 수 있습니다.

 

1. 프로젝트를 storyboard로 생성

2. 네비게이션탭에서 스토리보드 삭제

네비게이션탭에서 storyboard 삭제

 

3. Info 탭에서 [Main storyboard file base name] 삭제

 

4. Application Scene Manifest에서 화살표를 통해 하위로 내려가서, [storyboard name] 삭제

 

5. SceneDelegate에서 willConnectTo을 아래와 같이 수정

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        // rootViewController 설정
        window?.rootViewController = ViewController()
        window?.makeKeyAndVisible()
    }
 

해석

  1. func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions): 이 메소드는 앱이 시작될 때, 즉 새로운 UIScene 세션을 생성하려고 할 때 호출됩니다.
  2. guard let windowScene = (scene as? UIWindowScene) else { return }: 이 코드는 scene을 UIWindowScene으로 캐스팅하려고 시도합니다. 만약 캐스팅에 실패하면, 즉 scene이 UIWindowScene 타입이 아니라면, 메소드가 종료됩니다.
  3. window = UIWindow(windowScene: windowScene): 여기서 window 인스턴스를 생성하고 현재의 windowScene을 이용하여 초기화합니다.
  4. window?.rootViewController = ViewController(): rootViewController는 앱의 첫 화면을 결정합니다. 여기서는 ViewController()를 생성하여 첫 화면으로 설정하고 있습니다.
  5. window?.makeKeyAndVisible(): 이 메소드를 호출하면, window가 활성화되고 사용자에게 보이게 됩니다.
makeKeyAndVisible() 관련 참고 블로그 & 공식문서

https://ios-development.tistory.com/314

 

[iOS - swift] UIWindow, makeKeyAndVisible()

UIWindow 란? View 들을 담는 컨테이너 사용자 인터페이스에 배경을 제공하며 이벤트 처리 행동을 제공하는 객체 시각적인 화면을 가지고 있지 않고 기능적인 면을 담당(상호작용 처리, fkdnxldx z축

ios-development.tistory.com

https://developer.apple.com/documentation/uikit/uiwindow/1621610-makekey

 

makeKey() | Apple Developer Documentation

Makes the window the key window.

developer.apple.com