SwiftUI에서 기본적인 제스처 처리하기
SwiftUI에서 기본적인 제스처 처리하기
SwiftUI는 앱을 빠르고 직관적으로 개발할 수 있는 강력한 프레임워크입니다. SwiftUI에서 제스처
는 터치, 스와이프, 드래그 등의 입력을 인식하고 반응하는 도구로 사용됩니다. 이 글에서는 기본적인 제스처를 SwiftUI에서 처리하는 방법을 살펴보겠습니다.
탭 제스처
탭 제스처
는 가장 기본적인 터치 이벤트 중 하나입니다. SwiftUI에서는 TapGesture
를 사용하여 탭 이벤트를 처리할 수 있습니다. 예제 코드를 통해 이를 알아봅니다.
swiftstruct ContentView: View { @State private var isTapped = false var body: some View { Text(isTapped ? "Tapped!" : "Tap me") .padding() .background(isTapped ? Color.green : Color.red) .onTapGesture { isTapped.toggle() } } }
위 코드에서는 Text 뷰에 onTapGesture
를 사용하여 탭 이벤트를 처리합니다. 사용자가 텍스트를 탭하면 isTapped
상태 변수가 토글되고, 그에 따라 텍스트와 배경색이 변경됩니다.
롱 프레스 제스처
롱 프레스
는 사용자가 화면을 길게 누르는 동작을 인식하는 제스처입니다. 다소 복잡하게 느껴질 수 있는 제스처이지만, SwiftUI에서는 LongPressGesture
로 쉽게 구현할 수 있습니다.
swiftstruct ContentView: View { @State private var isPressed = false var body: some View { Text(isPressed ? "Long Pressed!" : "Long Press me") .padding() .background(isPressed ? Color.blue : Color.gray) .onLongPressGesture(minimumDuration: 2) { isPressed.toggle() } } }
위 코드에서는 Text 뷰에 onLongPressGesture
를 적용하여 롱 프레스 이벤트를 처리합니다. 사용자가 텍스트를 2초 이상 길게 누르면 isPressed
변수의 값이 토글됩니다.
드래그 제스처
드래그 제스처
는 사용자가 화면에서 객체를 드래그하는 동작을 인식합니다. SwiftUI에서는 DragGesture
를 사용하여 드래그 이벤트를 처리할 수 있습니다.
swiftstruct ContentView: View { @State private var offset = CGSize.zero var body: some View { Circle() .fill(Color.purple) .frame(width: 100, height: 100) .offset(offset) .gesture( DragGesture() .onChanged { value in offset = value.translation } .onEnded { _ in offset = .zero } ) } }
여기서는 Circle 뷰에 DragGesture
를 적용하여 드래그 이벤트를 처리합니다. 사용자가 원을 드래그하면 onChanged
클로저가 호출되어 원의 위치가 업데이트됩니다.
스와이프 제스처
SwiftUI에서 스와이프 제스처
를 처리하는 것은 DragGesture
와 유사합니다. 사용자는 화면을 특정 방향으로 빠르게 스와이프하는 경우를 인식합니다.
swiftstruct ContentView: View { @State private var isSwiped = false var body: some View { Text(isSwiped ? "Swiped!" : "Swipe me") .padding() .background(isSwiped ? Color.orange : Color.yellow) .gesture( DragGesture(minimumDistance: 50) .onEnded { value in if value.translation.width > 50 { isSwiped = true } else { isSwiped = false } } ) } }
여기서는 DragGesture
를 사용하여 스와이프 제스처를 감지합니다. 사용자가 특정 거리 이상으로 스와이프하면 isSwiped
변수가 설정됩니다.
제스처 조합하기
SwiftUI에서는 여러 제스처를 동시에 적용할 수도 있습니다. 예를 들어, 탭 제스처와 롱 프레스 제스처를 동시에 적용하려면 아래와 같이 작성할 수 있습니다.
swiftstruct ContentView: View { @State private var actionMessage = "" var body: some View { Text(actionMessage) .padding() .background(Color.gray) .gesture( TapGesture() .onEnded { actionMessage = "Tapped!" } .simultaneously(with: LongPressGesture(minimumDuration: 2) .onEnded { _ in actionMessage = "Long Pressed!" } ) ) } }
여기서는 TapGesture
와 LongPressGesture
를 함께 적용하여 동시에 사용할 수 있는 방법을 보여줍니다. 사용자가 간단히 누르면