본문 바로가기
컴퓨터언어/Swift

[Swift/SwiftUI] GestureState

by 인턴개구리 2023. 8. 9.

A property wrapper type that updates a property while the user performs a gesture and resets the property back to its initial state when the gesture ends.
(사용자가 제스처를 수행하는 동안 속성을 업데이트하고 제스처가 끝날 때 속성을 초기 상태로 재설정하는 속성 래퍼 유형.)
출처 : 애플 개발자 홈페이지(https://developer.apple.com/documentation/swiftui/gesturestate)

Chat GPT에게 물어봤더니, 에러 나는 코드를 반환해서..애플 개발자 페이지에 있는 예시 코드로 실험해 보았다.


import swiftUI

struct SimpleLongPressGestureView: View {
    @GestureState private var isDetectingLongPress = false


    var longPress: some Gesture {
        LongPressGesture(minimumDuration: 3)
            .updating($isDetectingLongPress) { currentState, gestureState, transaction in
                gestureState = currentState
            }
    }


    var body: some View {
        Circle()
            .fill(self.isDetectingLongPress ? Color.red : Color.green)
            .frame(width: 100, height: 100, alignment: .center)
            .gesture(longPress)
    }
}
1. @GestureState private var isDetectingLongPress = false
2. .fill(self.isDetectingLongPress ? Color.red : Color.green)



현재 isDetectLongPress의 상태는 false이므로, 초기에 원은 green이다.

LongPressGesture(minimumDuration: 3)
            .updating($isDetectingLongPress) { currentState, gestureState, transaction in
                gestureState = currentState
                }


오래누르기(LongPress)를 하면 3초간은 isDetectLongPress가 true로 바뀌며 green-> red으로 전환된다.
그러다가 3초 지나면 다시 false로 바뀌며 원은 green으로 전환된다.


1. Long Press -> 원이 green(false) -> red(true)
2. 오래 누르고 있어도 3초 지나면 다시 green(false)