본문 바로가기
앱/iOS(Swift)

[Swift] gesture

by 리드맥 2022. 2. 14.

제스쳐: 화면을 통해 전달된 사용자의 입력

 

iOS에는 사용자의 입력을 제스쳐로 인식하는 추상 레이어가 있다 

제스쳐는 iOS에서 UIGestureRecognizer라는 클래스의 인스턴스에 의해 인식이된다

UIGestureRecognizer 를 상속받은 클래스들이 여럿 있는데 원하는 제스쳐 종류를 쓰려고 그 서브클래스들을 생성한다

ex) panGestureReconizer

 

 

사용법

1. 어떤 UIView객체가 이 Recognizer를 받아서  해당하는 제스쳐를 인식하도록 하는것

    오직 View 에서만 제스쳐를 인식할 수 있고 Controller 는 불가능

    따라서 어떤 View에게 지금부터 제스쳐를 인식해달라고 부탁하는것

    GestureRecognizer를 생성하고 어떤  View 에 추가하는곳은 대부분 Controller가 담당

어떤 View들은 제스쳐 인식기능이 매우 핵심적이어서 View자체적으로 GestureRecognizer를 추가

ex)scrollView: 위아래로 pan 해서 스크롤 그래서 스크롤 뷰 자체적으로 PanGestureRecognizer와 pinchGestureReciggnizer를 자기자신에 추가한다 

Controller는 제스쳐를 인식할 수 없고 오직 소속된 View에 gerture 추가만 가능

@IBOutlet weak var pannableView: UIView {

didSet{
let recognizer = UIPanGestureRecognizer(

//self: Controller가 자체적으로 팬제스쳐를 처리한다는 뜻  _: 는 인자로 UIPanGestureRecognizer 가 들어간다는 뜻
target: self, action: #selector(ViewController.pan(_:))
)

pannableView.addGestureRecognizer(recognizer)
}
}

 

 

2. Recognizer가 제스쳐를 인식하고 GestureHandler가 처리 담당

func pan(gesture: UIPanGestireRecognizer) {
switrh gesture.state{
	case .Changed: fallthrough
    case .Ended:
     let translation = gesture.translationInView(pannableView)
     gesture.setTranslation(CGPointZero, inView: pannableView)
     default: break
}
}

 

Handler: Controller, View에서 처리가능 아니면 아에 다른 것이 처리가능 UI와 독립된 구조이기 때문에 Model에서 처리할 일은 절대로 없다. 만약 제스쳐가 Model을 직접적으로 변경한다면 당연히 Controller 가 제스쳐를 쳐리한다

Conroller는 Model에 영향을 주는 제스쳐의 Recognizer로 자신을 설정하는것

 

 

' > iOS(Swift)' 카테고리의 다른 글

[Swift] Extension  (0) 2022.02.17
[Swift] 클로저에서 self 를 사용하는 이유  (0) 2022.02.16
[iOS] Attributes inspector Content Mode Redraw  (0) 2022.02.08
[Swift] View  (0) 2022.01.29
[Swift] awakeFromNib  (0) 2022.01.29

댓글