onLongPressGestrure를 사용하게 되면 길게 꾹 눌렀을 때 동작합니다
사용하는 방법은 매우 간단합니다. 다음과 같이 onLongPressGesture를 사용하여 클로저에 동작할 내용을 적습니다.
struct ContentView: View {
@State var color: Color = .black
var body: some View {
Text("길게 누르세요")
.foregroundStyle(color)
.onLongPressGesture {
color = .red
}
}
}
또는 다음과 같은 코드를 만들 수 있습니다.
struct ContentView: View {
@State var isComplete: Bool = false
@State var isSuccess: Bool = false
var body: some View {
Rectangle()
.fill(isSuccess ? .green : .blue)
.frame(maxWidth: isComplete ? .infinity : 0)
.frame(height: 55)
.frame(maxWidth: .infinity, alignment: .leading)
.background(.gray)
Text("길게 누르세요")
.foregroundStyle(.white)
.padding()
.background(.black)
.clipShape(RoundedRectangle(cornerRadius: 10))
.onLongPressGesture(minimumDuration: 1.0, maximumDistance: 50) {
isSuccess = true
} onPressingChanged: { isPressing in
if isPressing {
withAnimation(.easeInOut(duration: 1.0)) {
isComplete.toggle()
}
} else {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
if !isSuccess {
withAnimation(.easeInOut) {
isComplete.toggle()
}
}
}
}
}
Button(action: {
isComplete = false
isSuccess = false
}, label: {
Text("리셋")
})
}
}
'SwiftUI' 카테고리의 다른 글
@discardableResult 반환값을 무시하게 만들기 (0) | 2024.04.12 |
---|---|
UIscreen.main will be deprecated 대처하기 (0) | 2024.04.12 |
haptics / vibration (진동) (0) | 2024.04.12 |
Publishers and Subscribers (Combine) (0) | 2024.04.11 |
Combine을 이용하여 값 변화에 대응하는 뷰 만들기 (0) | 2024.04.10 |