- SwiftUI ์ฑ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์ฑ์ ์ฑ ํ๋กํ ์ฝ์ ์ค์ํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง.
- ์ด ๊ตฌ์กฐ์ body ์์ฑ์ ํ๋ ์ด์์ Scene์ ๋ฐํํ๊ณ ํ์ํ ์ฝํ ์ธ ๋ฅผ ์ ๊ณต.
- @main ์์ฑ์ ์ฑ์ entry point๋ฅผ ์๋ณ.
- ๊ธฐ๋ณธ์ ์ผ๋ก SwiftUI view ํ์ผ์ ๋ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์ ์ธ
- ์ฒซ ๋ฒ์งธ ๊ตฌ์กฐ๋ View ํ๋กํ ์ฝ์ ์ค์ํ๊ณ ๋ทฐ์ ์ฝํ ์ธ ์ ๋ ์ด์์์ ์ค๋ช
- ๋ ๋ฒ์งธ ๊ตฌ์กฐ๋ ํด๋น ๋ณด๊ธฐ์ ๋ํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ ์ธ
๋ณด๋ฉด ํํ ๋ฆฌ์ผ ๊ณต์ ๋ฌธ์๋ ๋ด ์ฝ๋๋ ๋ค๋ฅธ ๊ฑธ ๋ณผ ์ ์๋๋ฐ, ์ด๊ฑด xcode๊ฐ ์ ๋ฐ์ดํธ ๋๋ฉด์ ๊ธฐ๋ณธ ์ฝ๋๊ฐ ์์ด์ฝ์ด ์ถ๊ฐ๋ ui๋ก ๋ฐ๋๋ฏ ํ๋ค.
๋ฑํ ํด๋๊ตฌ์กฐ์์ ์ด๋ฏธ์ง ํ์ผ์ด ์์ด์ ์์ํ์๋๋ฐ, ๋ ๋ ํ ์ฐ๋ฆฌํ ํ ํฌ ๋๋ฃ ๋ฃจ๋น ์ด SF Symbols์ ์กด์ฌ๋ฅผ ์๋ ค์คฌ๋ค!
Image(systemName: "์์ด์ฝ ์ด๋ฆ") ์ด๋ ๊ฒ ํ๋ฉด ๋ก์ปฌ์์ ๋ฐ๋ก ์ด๋ฏธ์ง ํ์ผ์ด ์์ด๋ ์ด๋ฏธ์ง ์ฝ์ ์ด ๊ฐ๋ฅํ๋ค.
SwiftUI๊ฐ ์ ๋ง ๊ฐํธํ๊ณ ์ข์๊ฒ, ๋ค์ .์ ๋ถ์ฌ์ ํ์ฅ์์ฒ๋ผ ์ฌ๋ฌ ๋์์ธ ์์๋ ์์ฑ๊ฐ์ ๋ฐ๋ก๋ฐ๋ก ์ฝ๋ฉํ ์ ์๋ค๋ ์ .
์์๋ง ์ต์ผ๋ฉด UI ์ ๋ง ๋นจ๋ฆฌ ๊ทธ๋ฆด ์ ์์ ๋ฏ! ์์ง์ ์ธ์ธ๊ฒ ๋ง๋ค.
- ์ฝ๋ ๋ณ๊ฒฝ ํน์ ์ธ์คํํฐ๋ฅผ ์ฌ์ฉํ์ฌ text view ์์
- Landmarks ์ฑ์ ๋น๋ํ ๋ source editor, ์บ๋ฒ์ค, ์ธ์คํํฐ์ ๊ฐ์ ํธ์ง๊ธฐ ์กฐํฉ์ ์ฌ์ฉ
- ์ฌ์ฉํ๋ ๋๊ตฌ์ ๊ด๊ณ์์ด ์ฝ๋๋ ์ ๋ฐ์ดํธ๋ ์ํ๋ก ์ ์ง๋๋ค.
1) ์ธ์คํํฐ
- SwiftUI ๋ณด๊ธฐ๋ฅผ ์ฌ์ฉ์ ์ง์ ํ๋ ค๋ฉด modifers ๋ผ๋ ๋ฉ์๋๋ฅผ ํธ์ถ.
- modifers๋ ๋ทฐ๋ฅผ ๋ํํ์ฌ ํ์ ๋๋ ๊ธฐํ ์์ฑ์ ๋ณ๊ฒฝ.
- ๊ฐ modifer๋ ์๋ก์ด view๋ฅผ ๋ฐํํ๋ฏ๋ก ์ฌ๋ฌ modifers๋ฅผ ์ฌ์ฌ์ฒ๋ผ ์ฎ์ด์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ์ผ๋ฐ์
Stack์ ์ด์ฉํ์ฌ ์ฌ๋ฌ๊ฐ์ง view(UI์์ ์ธ๋ฏ) ๊ฒฐํฉ
HStack์ด ๊ฐ๋ก๋ก, VStack์ด ์ธ๋ก
์ฝ๋์ ๋ฐ๋ก ๋๊ณ ์ฌ ์ ์์
//
// SwiftUIView.swift
// Landmarks
//
// Created by ๊นํ์ on 2023/03/26.
//
import SwiftUI
struct CircleImage: View {
var body: some View {
Image("turtlerock")
.clipShape(Circle())
.overlay {
Circle().stroke(.white, lineWidth: 4)
}
.shadow(radius: 7)
}
}
struct CircleImage_Previews: PreviewProvider {
static var previews: some View {
CircleImage()
}
}
- @State ํน์ฑ์ ์ฌ์ฉํ์ฌ ๋ ์ด์์ ๋ณด๊ธฐ์์ ์์ ํ ์ ์๋ ์ฑ์ ๋ฐ์ดํฐ์ ๋ํ ์ ๋ขฐํ ์ ์๋ ์์ค๋ฅผ ์ค์
- SwiftUI๋ ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง๋ฅผ ๊ด๋ฆฌํ๊ณ ๊ฐ์ ๋ฐ๋ผ ๋ทฐ๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํจ
//
// ContentView.swift
// Landmarks
//
// Created by ๊นํ์ on 2023/03/26.
//
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
MapView()
.ignoresSafeArea(edges: .top)
.frame(height: 300)
CircleImage()
.offset(y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
Text("Turtle Rock")
.font(.title)
.foregroundColor(.black)
HStack {
Text("Joshua Tree National Park")
.font(.subheadline)
Spacer()
Text("California")
.font(.subheadline)
}
.font(.subheadline)
.foregroundColor(.secondary)
Divider()
Text("About Turtle Rock")
.font(.title2)
Text("Descriptive text goes here.")
}
.padding()
Spacer()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
๋๊ธ