Rectangle
/ Circle
/ RoundedRectangle
/ Capsule
에 대해 알아보도록 합시다.
Shape
SwiftUI에는 사각형
, 원
및 캡슐
과 같은 여러 가지 기본 제공 모양이 있으며 필요에 따라 각 모양을 만들고 색상을 지정하고 배치할 수 있습니다.
Rectangle
Circle
RoundedRectangle
Capsule
Circle
Circle()
.fill(Color.red)
.frame(width: 200, height: 200)
Rectangle
VStack() {
Rectangle()
.fill(Color.blue)
.frame(width: 100, height: 100)
Rectangle()
.fill(Color.blue)
.frame(height: 5)
}
RoundedRectangle
RoundedRectangle(cornerRadius: 20)
.fill(Color.green)
.frame(width: 200, height: 120)
Capsule
Capsule()
.fill(Color.black)
.frame(width: 200, height: 120)
Stack을 사용하여 활용
지금까지는 하나의 스택만을 사용해서 다루어 보았지만, 좀 더 복잡한 UI를 만드려면 여러 개의 스택을 함께 사용해야 합니다.
HStack
내부에 VStack
, 그 내부에 다시한번 HStack
이런식으로 스택 내부에 여러 개의 스택을 중첩해서 사용할 수 있고, 이것이 SwiftUI에서 뷰를 구성하는 방법입니다.
이번에 만들어 볼 내용은 다음 그림과 같은 모습이 될 것입니다.
어디서 어떤 스택이 사용되는지 생각해 보며 코드를 살펴봅시다! 완성된 코드를 한 번에 보면 복잡하게 느껴질 수 있으니 조금씩 나누어서 살펴보는 것이 좋습니다.
VStack
우선 처음 시작할 것은 전반적으로 세로 방향이 메인으로 구성되어있으므로 VStack
을 사용해 세개의 텍스트를 작성하는 것입니다.
VStack {
Text("도형만들기")
.font(.largeTitle)
Text("둥근모양")
.font(.title)
Text("각진모양")
.font(.title)
} .padding()
HStack 추가 후, Spacer
제목을 제외한 아래 2개의 텍스트에 대해 각각 HStack
을 추가하고, Spacer()
를 이용해 가장 좌측에 배치하도록 합니다.
VStack {
Text("도형만들기")
.font(.largeTitle)
HStack {
Text("둥근모양")
.font(.title)
Spacer() //왼쪽 정렬이 되도록
}
Spacer()
HStack {
Text("각진모양")
.font(.title)
Spacer() //왼쪽 정렬이 되도록
}
}.padding()
선 위에 도형 넣기
다음 코드를 "둥근모양" 이 포함된 HStack
의 다음 줄에 입력합니다. 둥근 모양 가운데에 선이 있는데, 그 선은 ZStack
으로 만들어주고 수식을 넣어줘야 합니다.
HStack {
Text("둥근모양")
.font(.title)
Spacer()
}
ZStack {
Rectangle().frame(height: 10) //가운데 선
HStack {
Circle().foregroundColor(.blue) //원
Ellipse().foregroundColor(.green) //타원
Capsule().foregroundColor(.orange) //캡슐
RoundedRectangle(cornerRadius: 30).fill(Color.gray) //둥근모서리
}
}
각진 모양 추가
마찬가지로 "각진 모양" 에도 HStack
의 다음줄에 추가해줍니다.
HStack {
Text("각진모양")
.font(.title)
Spacer()
}
ZStack {
Rectangle().frame(height: 10) //가운데 선
HStack {
Color.red //이렇게만해도 직사각형이 생성된다.
Rectangle().fill(Color.blue)
RoundedRectangle(cornerRadius: 0).fill(Color.purple)
}
}
완성 코드
VStack {
Text("도형만들기")
.font(.largeTitle)
HStack {
Text("둥근모양")
.font(.title)
Spacer()
}
ZStack {
Rectangle().frame(height: 10)
HStack {
Circle().foregroundColor(.blue)
Ellipse().foregroundColor(.green)
Capsule().foregroundColor(.orange)
RoundedRectangle(cornerRadius: 30).fill(Color.gray)
}
}
Spacer()
HStack {
Text("각진모양")
.font(.title)
Spacer()
}
ZStack {
Rectangle().frame(height: 10)
HStack{
Color.red
Rectangle().fill(Color.blue)
RoundedRectangle(cornerRadius: 0).fill(Color.purple)
}
}
} //VStack
.padding()
}
}
읽어주셔서 감사합니다🤟
'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 : Colors and Gradient (0) | 2021.01.22 |
SwiftUI : Image (0) | 2021.01.21 |