SwiftUI๋ก ์ข ๋ ๋ณต์กํ ๋์์ธ์ ์ด๋ป๊ฒ ๋ง๋ค๊น?
1. background color ์ง์ ํ๊ธฐ
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack {
Color(red: 1.00, green: 0.69, blue: 0.25)
.edgesIgnoringSafeArea(.all)
Text("Hello, world!")
.padding()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Zstack ์ผ๋ก ์๋๋ก ํด์ฃผ๊ณ , ๋งจ ๋ฐ์ Color๋ฅผ ๊น์์ค๋ค. Xcode ์์ ์ ๊ณตํ๋ ์์ด ๋ง์ ์๋ค๋ฉด Custom ์ปฌ๋ฌ๋ฅผ ์ฐพ์๋ณด์.
.edgesIgnoringSafeArea(.all) ์ ์ ์ด์ฃผ๋ฉด safe area ์์ญ๊น์ง ์๊น์ ์ ํ ์ ์๋ค.
[์ปฌ๋ฌ ์ฐพ๋ ๊ณณ]
[16์ง์ -> UIColor๋ก ๋ฐ๊พธ๊ธฐ]
https://www.uicolor.io/#/hex-to-ui
2. ๊ธ์ ๊พธ๋ฏธ๊ธฐ
1) ํฐํธ๋ฅผ ๋ค์ด๋ฐ๊ณ ํ๋ก์ ํธ์ ์ถ๊ฐํ๋ค.
ํ๋ก์ ํธ ๋ด์ Fonts ํด๋๋ฅผ ๋ง๋ค์ด์ ๋๋๊ทธํด์ ๋ฃ๋๋ค. ๋ฃ์ ๋ ์์ฑ์ ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ด ํ๋ฉด ๋๋ค. Target Check !
2) Info.plist ์ font ๋ฅผ ์ถ๊ฐํด์ค๋ค.
3) Text Modifer๋ก font๋ฅผ ์ถ๊ฐํด์ค๋ค.
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack {
Color(red: 1.00, green: 0.69, blue: 0.25)
.edgesIgnoringSafeArea(.all)
Text("Yoonsung")
.font(Font.custom("Pacifico-Regular", size: 40))
.bold()
.foregroundColor(.white)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
[๋ฌด๋ฃ Font ๋ค์ด๋ก๋ ์ฌ์ดํธ]
[์ฝ๋]
๊ธ์์ Font Modifer ๋ฅผ ์ถ๊ฐํด์ฃผ๊ณ , ์์ ํฐํธ๋ช ์ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
3. ์ด๋ฏธ์ง ์ถ๊ฐํ๊ณ ๊พธ๋ฏธ๊ธฐ
1) Assets ์ ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํด์ค๋ค.
2) ContentView์ ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํด์ฃผ๊ณ ์์ฑ์ ์ถ๊ฐํ๋ค.
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack {
Color(red: 1.00, green: 0.69, blue: 0.25)
.edgesIgnoringSafeArea(.all)
VStack {
Image("apple")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 100.0, height: /*@START_MENU_TOKEN@*/100.0/*@END_MENU_TOKEN@*/)
.clipShape(Circle())
Text("Yoonsung")
.font(Font.custom("Pacifico-Regular", size: 40))
.bold()
.foregroundColor(.white)
Text("iOS Developer").foregroundColor(.white)
.font(.system(size: 20))
.bold()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
.resizable()์ ์ฌ์ด์ฆ๋ฅผ ์ฌ์ค์ ํ ์ ์๊ฒ ํ๋ ์์ฑ์ด๋ค.
.aspectRatio๋ ํ๋ฉด๋น์จ ์ค์ , frame์ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ง์ ์ง์ ํ ์ ์๋ ์์ฑ์ด๋ค.
.clipShape(Circle()) ์ ์ด๋ฏธ์ง์ ๋ชจ์์ ์ง์ ํ ์ ์๊ฒ ํด์ค๋ค. Circle()์ด๋ฉด ๋๊ทธ๋ ๋ชจ์ !
.overlay๋ ํ ๋๋ฆฌ๋ฅผ ์ง์ ํ ์ ์๊ฒ ํด์ค๋ค.
4. ํ๋ฉด ๊ตฌ๋ถ์ ๋ฃ๊ธฐ, ํ ์คํธ ๋ฐ์ค ๊พธ๋ฉฐ์ ๋ฐฐ์นํ๊ธฐ
๋ฅ๊ทผ๋ชจ์์ ๋ํ ์์ ์ ํ๊ธฐ ์์ด์ฝ๊ณผ ์ ํ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ค.
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack {
Color(red: 1.00, green: 0.69, blue: 0.25)
.edgesIgnoringSafeArea(.all)
VStack {
Image("apple")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 100.0, height: /*@START_MENU_TOKEN@*/100.0/*@END_MENU_TOKEN@*/)
.clipShape(Circle())
.overlay(
Circle().stroke(Color.gray, lineWidth: 5))
Text("Yoonsung")
.font(Font.custom("Pacifico-Regular", size: 40))
.bold()
.foregroundColor(.white)
Text("iOS Developer").foregroundColor(.white)
.font(.system(size: 20))
.bold()
Divider()
Capsule()
//.foregroundColor(Color.white)
.fill(Color.white)
.frame(width: 400, height: 50)
.overlay(HStack{
Image(systemName: "phone.fill")
.foregroundColor(.green)
Text("+82 000-0000-0000")
})
.padding(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Divider() ์ด ๊ฐ๋ก ๊ตฌ๋ถ์.
๋ฅ๊ทผ๋ํ์ Capsule()์ด๋ RoundedRectangle()์ ์ด์ฉํ๋ฉด ๋๋ค.
๋ํ์ ์์ฑ์ฐ๊ธฐ๋ forgroundColor()๋ fill() ์์ฑ์ผ๋ก ์ ์ฉ.
๋ํ ์์ ์ด๋ฏธ์ง์ ํ ์คํธ๋ฅผ ๋ฃ์ผ๋ ค๋ฉด overlay() ์์ฑ์ ์ฐ๋ฉด ๋๋ค.
์ด๋ ์ด๋ฏธ์ง์ ํ ์คํธ๋ฅผ ๊ฐ๋ก๋ก ๋ฐฐ์นํด์ผ ํ๋ฏ๋ก HStack์ ์ถ๊ฐํ๋ค.
๋ํ์ด ๋๋ฌด ์ข์ฐ์ ๋ฟ์ง ์๊ฒ ํจ๋ฉ์ ์ถ๊ฐํ๋ค.
5. ๋ํ ๋ณต์ ํด์ ์ฌ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ธฐ. ExtractedView !
1) ์ํ๋ ๊ฐ์ฒด๋ฅผ Extracted View ๋ก ๋บ๋ค.
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack {
Color(red: 1.00, green: 0.69, blue: 0.25)
.edgesIgnoringSafeArea(.all)
VStack {
Image("apple")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 100.0, height: /*@START_MENU_TOKEN@*/100.0/*@END_MENU_TOKEN@*/)
.clipShape(Circle())
.overlay(
Circle().stroke(Color.gray, lineWidth: 5))
Text("Yoonsung")
.font(Font.custom("Pacifico-Regular", size: 40))
.bold()
.foregroundColor(.white)
Text("iOS Developer").foregroundColor(.white)
.font(.system(size: 20))
.bold()
Divider()
InfoView()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct InfoView: View{
var body: some View{
Capsule()
.fill(Color.white)
.frame(width: 400, height: 50)
.overlay(HStack{
Image(systemName: "phone.fill")
.foregroundColor(.green)
Text("+82 000-0000-0000")
})
.padding(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/)
}
}
2) ๊ฐ์ฒด์ ํ ์คํธ๋ฅผ ์ํฉ์ ๋ง๊ฒ ๋ฐ๊ฟ์ฃผ๊ธฐ ์ํด ๋ณ์ ๋ฐ ์ธ์๋ก ๋บ๋ค.