20-22일차: SwiftUI의 100일 - 깃발 추측(프로젝트 2)
16345 단어 swiftui100daysofcodeswift
https://www.hackingwithswift.com/100/swiftui/21
https://www.hackingwithswift.com/100/swiftui/22
플래그 프로젝트는 스택, 이미지, 색상 및 그라데이션, 경고를 포함하는 또 다른 SwiftUI 보기 세트를 도입합니다.
스택을 사용하여 보기 정렬
여러 보기를 렌더링하려는 경우 유용한 보기가 있습니다:
VStack
, HStack
, ZStack
.VStack
이를 사용하여 두 개 이상의 뷰를 수직으로 쌓아 배치합니다.
var body: some View {
VStack {
Text("Hello, world!")
Text("This is inside a stack")
}
}
보기 사이에 간격을 추가하고 각각
spacing
및 alignment
속성을 사용하여 정렬할 수 있습니다.VStack(alignment: .leading, spacing: 20) {
Text("Hello, world!")
Text("This is inside a stack")
}
HStack
이것은
VStack
와 동일하며 뷰를 가로로 쌓기만 하면 됩니다.HStack(spacing: 20) {
Text("Hello, world!")
Text("This is inside a stack")
}
ZStack
ZStack은 뷰가 서로 겹치도록 깊이별로 정렬하기 위한 것입니다.
ZStack {
Text("Hello, world!")
Text("This is inside a stack")
}
색상 및 프레임
색상은 뷰 그 자체입니다. 색상은 사용 가능한 모든 공간을 자동으로 차지합니다.
frame()
수정자를 사용하여 특정 크기를 설정합니다.ZStack {
Color.red
.frame(width: 200, height: 200)
Text("Your content")
}
최소 및 최대 너비와 높이를 지정할 수도 있습니다.
Color.red
.frame(minWidth: 200, maxWidth: .infinity, maxHeight: 200)
그라디언트
LinearGradient
, RadialGradient
및 AngularGradient
의 세 가지 종류의 그래디언트를 사용할 수 있습니다.LinearGradient
선형 그래디언트는 한 방향으로 진행됩니다.
LinearGradient(gradient: Gradient(colors: [.white, .black]), startPoint: .top, endPoint: .bottom)
또한 색상과 색상이 사용되어야 하는 그라디언트를 따라 얼마나 멀리 지정할 수 있는 그라디언트 정지점을 제공할 수 있습니다.
LinearGradient(gradient: Gradient(stops: [
Gradient.Stop(color: .white, location: 0.45),
Gradient.Stop(color: .black, location: 0.55),
]), startPoint: .top, endPoint: .bottom)
방사형 그라데이션
방사형 그래디언트는 원 모양으로 바깥쪽으로 이동합니다.
RadialGradient(gradient: Gradient(colors: [.blue, .black]), center: .center, startRadius: 20, endRadius: 200)
앵귤러그라디언트
각도 그래디언트는 바깥쪽으로 방사되는 것이 아니라 원 주위로 색상을 순환하며 아름다운 효과를 만들 수 있습니다.
AngularGradient(gradient: Gradient(colors: [.red, .yellow, .green, .blue, .purple, .red]), center: .center)
버튼 및 이미지
버튼 모양을 사용자 정의할 수 있는 몇 가지 방법이 있습니다. 첫 번째는
role
입니다.Button("Delete selection", role: .destructive){}
둘째,
.bordered
및 .borderedProminent
버튼에 대한 내장 스타일 중 하나를 사용할 수 있을 뿐만 아니라 tint()
수정자를 사용하여 테두리가 있는 버튼에 사용되는 색상을 사용자 정의할 수 있습니다.VStack {
Button("Button 1") { }
.buttonStyle(.bordered)
Button("Button 2", role: .destructive) { }
.buttonStyle(.bordered)
Button("Button 3") { }
.buttonStyle(.borderedProminent)
.tint(.mint)
Button("Button 4", role: .destructive) { }
.buttonStyle(.borderedProminent)
}
레이블을 사용자 정의하거나 대신
Image
를 사용하려는 경우 두 번째 후행 클로저를 사용할 수 있습니다.VStack {
Button {
print("Button was tapped")
} label: {
Text("Tap me!")
.padding()
.foregroundColor(.white)
.background(.red)
}
Button {
print("Edit button was tapped")
} label: {
Image(systemName: "pencil")
}
Button {
print("Edit button was tapped")
} label: {
Label("Edit", systemImage: "pencil")
}
}
경고 메시지 표시
경고는 표시 여부를 알기 위해 특정 상태에 바인딩되는 보기의 또 다른 수정자로 존재합니다.
@State private var isShowingAlert = false
var body: some View {
Button("Show Alert") {
self.isShowingAlert = true
}
.alert("Important message", isPresented: $isShowingAlert) {
Button("Cancel", role: .cancel) { }
Button("Delete", role: .destructive) { }
} message: {
Text("Please read this.")
}
}
앱 챌린지
산출
소스 코드
Github
Reference
이 문제에 관하여(20-22일차: SwiftUI의 100일 - 깃발 추측(프로젝트 2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/johnkevinlosito/day-20-22-100-days-of-swiftui-guess-the-flag-project-2-57l5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)