일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- decode
- SwiftUI
- Apple Developer Academy
- 데드락
- 앨런
- 오브젝트
- 동시성
- 상호배제
- forEach
- @state
- 가상 메모리
- 인프런
- Codable
- Swift
- async
- struct
- Linked List
- deadlock
- 알고리즘
- 동기화
- 비동기
- UserDefaults
- core data
- 100 days of SwiftUI
- Algorithm
- 운영체제
- COLOR
- scrollview
- IOS
- 프로세스 스케줄링
Archives
- Today
- Total
기어가더라도 제대로
UIPanGestureDelegate 본문
번역한 말투라 어려운데,
"사용법 - 1번" 항목 부터 보시면 이해가 수월할 것입니다.
정의
UIGestureRecognizer 의 구체적인 서브 클래스이다.
그들의 액션 메서드 중에서, 이것을 채택하고있는 클래스(고객)에서 UIPanGestureRecognizer에게 현재 제스처의 전환 상태와 변화의 속도를 쿼리한다. == > 기준 좌표계 안에서 어떤 뷰의 이동에 따른 변화와 속도 변화를 알려준다는 거 같네요.
- translation(in:) → CGPoint
- velocity(in:) - > CGPoint
그들은 변환 및 속도 값에 사용할 뷰의 좌표계를 지정할 수 있습니다.
고객(클래스, VC 혹은 커스텀 PanGestureClass)는 또한 원하는 값의 상태로 변환을 초기화 할 수 있습니다.
panning 제스처는 연속적입니다. 물체를 끌어당길 때, 유저는 하나 이상의 손가락으로 눌러야합니다. 손가락 개수도 친히 지정해줍니다.
- state - began
- 사용자가 패닝으로 인식하게 충분한 거리를 허용된 최소 손가락 개수로 움직일 때, 제스처는 UIGestureRecognizer.State.began 을 시작합니다.
- state - changed
- 최소 손가락 개수로 누르며 손가락을 움직일 때, panning recognizer의 상태가 chaged 로 변합니다.
- state - ended
- 손가락을 모두 때면, UIGestrueRecognizer.State.eneded로 변합니다.
주요 속성
- var maximumNumberOfTouches : Int
- 최대 손가락의 개수를 지정합니다.
- 유효한 패닝에 손가락 개수가 이 수 이상을 넘을 수 없습니다.
- var minimumNumberOfTouches: Int
- 최소 손가락 개수를 지정합니다.
- 이 속성에서 정의 한 수 이상으로 눌러야 패닝이 인식됩니다.
- func translation(in: UIView?) → CGPoint
- 특정 뷰의 좌표계에서 펜제스처를 번역합니다
- 인자로 전달되는 뷰의 좌표계에 따라서 처음 제스처가 인식되었을 때부터 얼마나 좌표가 이동되었는지를 반환해줍니다.
- func setTraslation(CGPoint, in: UIView?)
- 특정 뷰의 좌표계 안에서 translation 값을 설정합니다.
- 바로 위의 메서드와의 차이점을 이해해야합니다.
- "UIPanGestureRecognizer는 뷰가 이동했다는 것을 알지 못한다"
- 뷰를 이동 시킨 후에 드래그가 처음 시작된 위치는 더이상 뷰의 위치가 아니다.
- 이 메서드를 호출해야 기준 좌표계에서 뷰의 현재 좌표를 드래그의 시작점으로 계속 업데이트 해야함.
- 적용 뷰(적당히 움직인 느낌)
- 미적용 뷰(4프레임에 저정도 움직였다. 미끄러진 느낌)
- func velocity(in: UIView?) → CGPoint
- 특정 좌표계 안에서 펜제스쳐의 속도를 번역합니다.
- point per second
- 초당 포인트를 속력으로 표현
- horizontal, vertical 로 분리하여 세부적인 표현 가능
사용법
- VC에서 UIGestureRecognizerDelegate 프로토콜 채택 후 PanGestrue와 관련한 메서드 구현, 델리게이트를 채택할 뷰마다 적용을 해줘야함
- Gesture 에 관한 다양한 설정(시작, 이동중, 끝, 기타 등등)을 별도의 UIGestureRecognizer 로 등록하고 VC에서는 이것을 프로퍼티로 등록한다음 이것의 델리게이트를 VC로 지정하는 방법
1. VC에서 UIGestureRecognizerDelegate 채택
2. Custom UIGestureRecognizer 선언
- 애플 공식 예제 코드를 보면 이해가 수월합니다.
- 어려우니까 1번 방식으로 하다가 너무 쉬워지면 커스텀 객체 선언 방법 2번을 해보세요.
- panGesture 뿐만 아니라 핀치, 회전, 초기화, 화면 전환(landscape, portrait)에 대한 힌트를 얻을 수 있음
- Main.storyboard 에서 직접 UIPanGestrueDelegate 를 view 객체들한테 할당한 모습이 보이고,
- 화면이 회전 할 때 마다, private func initializePieces() 가 실행됨
출처
'UIKit 기초' 카테고리의 다른 글
AppDelegate, SceneDelegate, VC 에 접근하기 (0) | 2022.08.23 |
---|---|
Layer, .anchorPoint, .Position, 그리고 view.center(feat, frame, bound) (0) | 2022.07.30 |
이상한 레이블 UIButton (0) | 2022.07.20 |
Compositional Layout 에서 header, Footer 잡는 법 (0) | 2022.07.20 |
iOS 주요 등장 인물들 (6) | 2022.07.08 |
Comments