Color
/ Gradient
에 대해 알아보도록 합시다.
Color
ZStack Color
ZStack
바로 뒤에 Color.색
을 주게 되면 전체에 배경화면이 써집니다. (Stack에 대해서는 View layout 에서 자세히 다루도록 하겠습니다.) 또, Color.red.frames(width: , height: )
를 주게 된다면 아래와 같은 결과를 생성할 수 있습니다.
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack {
Color.red.frame(width: 200, height: 200)
VStack {
Text("안녕")
Text("잘가")
}
}
}
}
Color(Literal())
iOS 13.0 버전 부터 더 이상 사용되지 않음
Color(Literal())
을 사용하여 색상을 선택할 수 있습니다.
background(Color(Literal())
ignoresSafeArea(_:edges:)
하지만, ZStack
에서 Color
값을 주면 SafeArea
부분이 하얀색으로 되고 나머지 부분만 배경화면이 적용되는 것을 확인할 수 있습니다. 이럴 때는 Color.red.IgnoringSafeArea(.all)
코드를 할당해 줄 수 있습니다.
ZStack {
Color.yellow.ignoresSafeArea(.all)
VStack {
Text("안녕")
Text("잘가")
}
}
ignoringSafeArea
에 all
/ top
/ bottom
을 넣을 때마다 바뀌는 레이아웃은 아래와 같습니다.
iOS 13.0부터 edgesIgnoringSafeArea가 더 이상 사용되지 않음
UIColor 지원
Color
타입에서 기본 제공하는 색은 UIColor
달라서 UIColor
타입에서 제공해 주는 색을 이용하고 싶은 경우가 종종 생깁니다. 예를 들어 UIColor
는 cyan
을 기본 제공하는데 반해 Color
타입(SwiftUI
) 에선 그렇지 않습니다. SwiftUI
에서 UIColor
를 시용하는 방법은 매우 간단합니다.
Color(UIColor.cyan)
아주 쉽죠? 이것을 이용해 앱에서 배경색으로 이용할 systemGray2 를추가해 줄 수도 있습니다.
systemGray
이 색은 iOS13
에서 추가된 것으로 라이트 모드에서는 연한 회색, 다크 모크에서는 검은색에 가까워지게 됩니다.
systemGray 색상 종류 (6가지)
Gradient
SwiftUI에서는 배경색을 그라데이션으로 지정해 줄 수 있습니다.
LinearGradient
LinearGradient(gradient: Gradient(colors: [.white, .black]), startPoint: .top, endPoint: .bottm)
ZStack {
LinearGradient(gradient: Gradient(colors: [Color.white, Color.black]),
startPoint: .top, endPoint: .bottom)
}
.edgesIgnoringSafeArea(.all)
}
}
RadialGradient원형 그라데이션
RadialGradient(gradient: Gradient(colors: [.blue, .black])
, center: .center, startRadius: 20, endRadius: 200)
ZStack {
RadialGradient(gradient: Gradient(colors: [Color.blue, Color.black]),
center: .center, startRadius: 20, endRadius: 200)
}
.edgesIgnoringSafeArea(.all)
}
}
Angular Gradient
AngularGradient(gradient: Gradient(colors: [.red, .orange, .yellow, .green, .blue, .purple, .red]), center: .center)
ZStack {
AngularGradient(gradient: Gradient(colors: [.red, .orange, .yellow, .green, .blue, .purple, .red]), center: .center)
}
.edgesIgnoringSafeArea(.all)
}
}
AngularGradient에는
angle을 사용할 수 있습니다. 아래 코드를 적용시켜 보겠습니다.
RoundedRectangle(cornerRadius: 20)
.fill(
AngularGradient(gradient: Gradient(colors: [Color("Peach"), Color.blue]),
center: .center,
angle: .degrees(90))
)
.frame(width: 300, height: 200)
만약 중간에 선을 없애고 싶다면 아래와 같이 angle을 조절하고
center부분을 수정해주시면 됩니다.
RoundedRectangle(cornerRadius: 20)
.fill(
AngularGradient(gradient: Gradient(colors: [Color("Peach"), Color.blue]),
center: .topLeading,
angle: .degrees(180 + 45))
)
.frame(width: 300, height: 200)
Text 배경에 적용
Text
뒷 배경을 그러데이션으로 지정해보도록 하겠습니다.
Text("서근 개발블로그")
.padding(40)
.font(.title)
.background(
LinearGradient(gradient: Gradient(colors: [Color.yellow, Color.green]), startPoint: .leading, endPoint: .trailing)
)
.cornerRadius(20)
도형 안에 그라데이션 채우기 .fill( )
도형을 그려주고 그 뒤에 그러데이션으로 채워줄 수 있습니다.
Circle()
.fill(
AngularGradient(gradient: Gradient(colors: [.red, .yellow, .green, .blue, .purple, .red]), center: .center)
)
.frame(width: 250, height: 250)
도형 테두리에 그라데이션 채우기 .strokeBorder( )
Circle()
.strokeBorder(
AngularGradient(gradient: Gradient(colors: [.red, .yellow, .green, .blue, .purple, .red]), center: .center)
)
.frame(width: 250, height: 250)
var color1 = Color(Literal())
var color2 = Color(Literal())
var body: some View {
VStack {
RoundedRectangle(cornerRadius: 30)
.fill(LinearGradient(gradient: Gradient(colors: [color1, color2]),
startPoint: .top, endPoint: .bottomTrailing))
.frame(width: 400, height: 250)
.shadow(color: Color.gray, radius: 25, x: -10, y: 10)
}
}
}
읽어주셔서 감사합니다🤟
본 게시글의 전체 코드 GitHub 👇🏻
'SWIFTUI > Image' 카테고리의 다른 글
SwiftUI : AspectRatio / GeometryReader / GeometryProxy (3) | 2021.04.04 |
---|---|
SwiftUI : ContainerRelativeShape (위젯에서만 사용가능) (0) | 2021.03.13 |
SwiftUI : trim( ) - Shape의 일부 그리기 (Timer) (0) | 2021.03.13 |
SwiftUI : Shape (Rectangle, Circle, Capsule...) (0) | 2021.01.22 |
SwiftUI : Image (0) | 2021.01.21 |