+ 버튼을 누르면 값이 증가하고, - 버튼을 누르면 값이 감소하는 간단한 기능이다.
정말 단순한 스테퍼도 있고, 커스텀 해서 다양하게 활용 가능한 스테퍼도 있다.
// Created by Toughie on 2023/04/30.
//
import SwiftUI
struct StepperPrac: View {
@State var stepperValue: Int = 10
@State var widthIncrement: CGFloat = 0
let fancyColor = LinearGradient(colors: [Color.blue, Color.green, Color.orange], startPoint: .topLeading, endPoint: .bottomTrailing)
var body: some View {
VStack(spacing: 20) {
// 최소값 0 이상 보장
Stepper("Stepper Basic: \(stepperValue)", value: $stepperValue, in: 0...Int.max)
RoundedRectangle(cornerRadius: 25)
.fill(fancyColor)
//프레임의 너비가 화면 최대 너비 - 100 만큼까지만 늘어날 수 있고(min 비교),
//최소 너비가 100 이상이도록(max 비교)
//즉 최소 너비가 100 이상, 화면 최대 너비 - 100 이하
.frame(
width: min(max(widthIncrement + 100, 100), UIScreen.main.bounds.width - 100),
height: 100)
.overlay(Text("🦁"))
.font(.largeTitle)
Stepper("Stepper Advanced") {
//Increment
incrementWidth(amount: 20)
} onDecrement: {
//Decrement
decrementWidth(amount: 20)
} onEditingChanged: { Bool in
//편집여부 확인
}
}
.padding(.horizontal, 50)
}
private func incrementWidth(amount: CGFloat) {
withAnimation(.easeInOut) {
widthIncrement += amount
}
}
private func decrementWidth(amount: CGFloat) {
withAnimation(.easeInOut) {
widthIncrement -= amount
}
}
}
+ Strideable
value에는 Strideable 프로토콜을 채택한 변수가 바인딩 되어야 한다.
Strideable은 프로토콜은 스위프트의 표준 라이브러리에 포함된 프로토콜 중 하나.
Strideable은 값을 일정한 간격으로 증가시키거나 감소시키는 기능을 제공하는 프로토콜.
Strideable 프로토콜을 채택한 타입은 값의 간격을 정의할 수 있는 Stride 타입을 가지고 있어야 한다.
- 일정한 간격으로 값의 *시퀀스를 생성하거나, 두 값 사이의 거리 계산 가능.
* 시퀀스 - 연관된 값들의 모음, 이 값을 차레대로 순회할 수 있도록 구성된 타입.
- Int, Float, Double과 같은 기본 타입은 Strideable 프로토콜을 채택
- for문에서 일정 간격 반복 가능(타입이 일정한 간격으로 변화하는 경우 유용하게 사용될 수 있음)
'SwiftUI > SwiftUI(Basic)' 카테고리의 다른 글
41. [SwiftUI] Tab bar, TabView 탭바, 탭뷰 / PageTabViewStyle() (0) | 2023.05.01 |
---|---|
40. [SwiftUI] Slider() 슬라이더, CVarARG (0) | 2023.05.01 |
38. [SwiftUI] DatePicker() 데이트피커 (0) | 2023.04.30 |
37. [SwiftUI] ColorPicker() 컬러피커 (0) | 2023.04.30 |
36. [SwiftUI] Picker() 피커 (0) | 2023.04.30 |