iOS/SwiftUI

SwiftUI 기본 정리

Developer-Michelle 2023. 2. 20. 11:30

SwiftUI 기본 정리

1. 텍스트 또는 이미지 등 무언가 속성을 쓰고 VStack이나 HStack으로 감싸는 식

 

 

 

1-1. 당연히 VStack 안에 HStack , 또는 HStack 안에 VStack이 들어갈 수 있다.

 

물론 위의 MyVStackView를 별도의 파일로 뺄 수도 있다.

 

 

2. 뷰에다가 클릭 처리를 하고 싶다? -> .onTapGesture { } 사용

import SwiftUI

struct ContentView: View {
    var body: some View {
        HStack {
            MyVStackView()
            MyVStackView()
            MyVStackView()
        }
        .padding(10)
        .background(Color.yellow)
        //탭 제스쳐 추가
        .onTapGesture {
            print("HStack 클릭됨")
        }
    }
}

 

3. @State : 값의 변화를 감지 -> 뷰에 적용할 수 있게 해줌

값이 변경되면서 위에서부터 아래로 랜더링 되면서 다시 뷰를 그린다.

import SwiftUI

struct ContentView: View {
    
    //@State: 값의 변화를 감지 -> 뷰에 적용할 수 있게 해줌
    @State private var isActivated: Bool = false
    
    var body: some View {
        HStack {
            MyVStackView()
            MyVStackView()
            MyVStackView()
        }
        .padding(10)
        .background(isActivated ? Color.yellow : Color.green)
        //탭 제스쳐 추가
        .onTapGesture {
            print("HStack 클릭됨")
            //toggle() true 이면 false로, false이면 true
            self.isActivated.toggle()
        }
    }
}

 

4. 애니메이션 효과 추가하고 싶다면? withAnimation { }

import SwiftUI

struct ContentView: View {
    
    //@State: 값의 변화를 감지 -> 뷰에 적용할 수 있게 해줌
    @State private var isActivated: Bool = false
    
    var body: some View {
        HStack {
            MyVStackView()
            MyVStackView()
            MyVStackView()
        }
        .padding(isActivated ? 30 : 10)
        .background(isActivated ? Color.yellow : Color.green)
        //탭 제스쳐 추가
        .onTapGesture {
            print("HStack 클릭됨")
            
            //애니메이션과 함께
            withAnimation {
                //toggle() true 이면 false로, false이면 true
                self.isActivated.toggle()
            }
        }
    }
}

 

font 관련

 .font(.caption) : 글씨 작아짐

.italic() :글씨 기울이기

.underline(): 밑줄

.strikethrough() :취소선

.lineLimit(2): 2줄로 제한(numberofLines)

.kerning(10) : 장평, 자간 조절

 

 

5. Navigation 달고 넘기고 싶다면?

넘기기 전의 뷰 전체를 네비게이션으로 감싼 다음에 -> 넘기면 됨

 

  NavigationLink(destination: Text("호호")) {
       Text("네비게이션")
 }

Text("네비게이션") 누르면 -> destination 으로 넘어감

 

import SwiftUI

struct ContentView: View {
    
    //@State: 값의 변화를 감지 -> 뷰에 적용할 수 있게 해줌
    @State private var isActivated: Bool = false
    
    var body: some View {
        
        NavigationView {
            VStack {
                HStack {
                    MyVStackView()
                    MyVStackView()
                    MyVStackView()
                }
                .padding(isActivated ? 30 : 10)
                .background(isActivated ? Color.yellow : Color.green)
                //탭 제스쳐 추가
                .onTapGesture {
                    print("HStack 클릭됨")
                    
                    //애니메이션과 함께
                    withAnimation {
                        //toggle() true 이면 false로, false이면 true
                        self.isActivated.toggle()
                    }
                }
                
                //네비게이션 버튼(링크)
                NavigationLink(destination: Text("호호")) {
                    Text("네비게이션")
                        .fontWeight(.heavy)
                        .font(.system(size: 40))
                        .padding()
                        .background(Color.orange)
                        .foregroundColor(Color.white)
                        .cornerRadius(30)
                }.padding(.top, 50)
            }
        }
    }
}

 

6. Spacer() 사용 (위 아래 등 공간 주기)

import SwiftUI

struct MyTextView: View {
    
    var body: some View {
        VStack {
            Spacer()
            Text("배경 아이템 인덱스")
                .font(.system(size:30))
                .fontWeight(.bold)
                .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
            Spacer()
                
        }.background(Color.orange)
    }
    
}

 

7. @Binding : 값 전달

A -> B 로 화면 전환시 값 전달

A, B 각각의 파일에 @Binding 관련 아래 코드 적고 처리

struct MyVStackView: View {
    
    //데이터를 연동시킨다
    @Binding var isActivated: Bool
    
    //생성자
    init(isActivated: Binding<Bool> = .constant(false)) {
        _isActivated = isActivated
    }
 }

 

8. Cmd + Shift + L 누르면 여러가지 요소들을 바로바로 끌어다 쓸 수 있음 (Text, Image... 등등 외울 필요 X)

 

참고) https://www.youtube.com/watch?v=qY9N34mfCjQ&list=PLgOlaPUIbynqyJHiTEv7CFaXd8g5jtogT&index=2

'iOS > SwiftUI' 카테고리의 다른 글

SwiftUI에서 Info.plist 사용 방법  (0) 2023.10.01
iOS SwiftUI) List (UIKit의 tableView에 해당)  (0) 2023.02.22
iOS SwiftUI) Image  (0) 2023.02.20
iOS SwiftUI) Text 관련  (0) 2023.02.20
iOS SwiftUI) WebView 띄우기  (0) 2023.02.20