관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] UISwipeGestureRecognizer 개념 (스와이프 제스처) 본문

iOS 응용 (swift)

[iOS - swift] UISwipeGestureRecognizer 개념 (스와이프 제스처)

jake-kim 2023. 12. 4. 01:16

스와이프 제스처

  • 4방향 direction에 관해 방향을 알려주는 discreate한 스와이프 제스처
    • discreate: "이산적인"
    • discreate가 핵심인데, 실시간으로 연속으로 불리는게 아닌 스와이프 한 번 하면 한 번 불린다는 의미 (스와이프하는 동시에 연속적으로 불리는게 아님)

https://developer.apple.com/documentation/uikit/uiswipegesturerecognizer

  • 스와이프 제스처의 프로퍼티에는 가장 중요한 direction이 있는데 이것은 스와이프의 4가지 방향에 대한 정보
    • ex) direction을 right 설정하면 왼쪽에서 오른쪽으로 스와이프 했을경우만 이벤트가 호출

public typealias UISwipeGestureRecognizerDirection = Int
extension UISwipeGestureRecognizer {

    public struct Direction : OptionSet, @unchecked Sendable {

        public init(rawValue: UInt)

        public static var right: UISwipeGestureRecognizer.Direction { get }

        public static var left: UISwipeGestureRecognizer.Direction { get }

        public static var up: UISwipeGestureRecognizer.Direction { get }

        public static var down: UISwipeGestureRecognizer.Direction { get }
    }
}
  • direction은 아래처럼 제스처 인스턴스를 만들어서 지정
let swipeRightGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipeRight(_:)))
swipeRightGestureRecognizer.direction = .right
view.addGestureRecognizer(swipeRightGestureRecognizer)
  • gesture의 상태에 따라 출력
// 오른쪽으로 스와이프할 때 호출되는 메서드
@objc func handleSwipeRight(_ gestureRecognizer: UISwipeGestureRecognizer) {
    switch gestureRecognizer.state {
    case .possible:
        print("possible")
    case .began:
        print("began")
    case .changed:
        print("changed")
    case .ended:
        print("ended")
    case .cancelled:
        print("cancelled")
    case .failed:
        print("failed")
    case .recognized:
        print("recognized")
    @unknown default:
        fatalError()
    }
}
  • 결과로는 ended만 불리므로 주의할 것

* 전체 코드: https://github.com/JK0369/ExSwipeGesture

* 참고 

- https://developer.apple.com/documentation/uikit/uiswipegesturerecognizer

Comments