Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
SwiftUI/SwiftUI(Basic)

[56] TextSelection / Window, Scene

by Toughie 2023. 5. 12.

⭐️TextSelection / Window, Scene⭐️

텍스트를 꾹 누르면 복사 할 수 있고, 공유도 할 수 있는 textselection에 대해 알아보자.

//  Created by Toughie on 2023/05/11.
//

import SwiftUI

struct TextSelectionPrac: View {
    var body: some View {
        Text("Hello, Toughie!")
            .textSelection(.enabled)
    }
}

단순한 모디파이어 하나로 액티비티뷰까지 띄울 수 있다니.. 파격적이다...

+ 텍스트를 탭했을 때 액티비티뷰를 띄울 수 있는 코드

//  Created by Toughie on 2023/05/12.
//

import SwiftUI

struct ActivityViewMini: View {
    
    let textToShare = "Hello, world!"
    
    var body: some View {
        Text("\(textToShare)")
            .padding()
            .onTapGesture {
                guard let windowScene = UIApplication.shared.connectedScenes.first(
                    where: { $0.activationState == .foregroundActive }) as? UIWindowScene,
                      
                      let window = windowScene.windows.first(where: { $0.isKeyWindow })
                        
                else { return }
                
                let vc = UIActivityViewController(activityItems: [textToShare], applicationActivities: [])
                
                window.rootViewController?.present(vc, animated: true, completion: nil)
            }
    }
}

윈도우와 씬

씬(Scene)은 iOS 앱에서 실행되는 화면을 나타낸다.

예를 들어, 메인 화면, 설정 화면, 상세 정보 화면 등 각각의 화면은 하나의 씬으로 처리된다.

 

한편, 윈도우(Window)는 ‘씬이 표시되는 영역’을 의미한다.

즉, 윈도우는 씬의 내용을 화면에 출력하는 역할을 한다. 일반적으로 윈도우와 씬은 1:1 대응되는 관계이다.

하지만 iOS 13부터는 멀티태스킹을 지원하면서 씬과 윈도우의 관계가 복잡해졌다.

예를 들어, 하나의 앱에서 두 개 이상의 씬을 동시에 화면에 표시할 수 있다.

이때 ‘각 씬은 각자의 윈도우를 가지고’, 각각 다른 화면 영역에 표시된다.

 

윈도우는 씬이나 뷰 컨트롤러를 포함하는 컨테이너이며, 화면에 콘텐츠를 표시하는 역할을 한다.

즉, 윈도우는 앱이 화면에 보여지는 영역을 나타내며, 여러 개의 씬을 포함할 수 있다.

 

각 씬은 하나의 뷰 컨트롤러와 관련이 있으며, 윈도우는 이러한 뷰 컨트롤러가 표시될 수 있는 여러 씬을 포함할 수 있다.
윈도우 내부에 (윈도우, 씬) 쌍이 여러 개 들어갈 수 있게 되었다는 것.

ex, iPad에서 하나의 앱을 Split View로 나누어서 보고 있는 경우, 하나의 앱은 두 개의 씬을 가지게 된다.

씬은 서로 다른 윈도우에 들어가게 되며, 하나의 윈도우 안에 개의 (윈도우, ) 쌍이 들어가는 것이다.

'SwiftUI > SwiftUI(Basic)' 카테고리의 다른 글

[58] List Swipe Actions  (0) 2023.05.12
[57] .buttonStyle / .controlSize / .buttonBorderShape  (0) 2023.05.12
[55] Background Materials  (0) 2023.05.11
[54] AsyncImage / @unknown  (0) 2023.05.11
[53] 온보딩뷰 만들기  (0) 2023.05.08