Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- ribs
- UICollectionView
- Refactoring
- 클린 코드
- uitableview
- swift documentation
- scrollview
- tableView
- clean architecture
- Xcode
- 리펙토링
- Observable
- Human interface guide
- RxCocoa
- 애니메이션
- SWIFT
- MVVM
- UITextView
- uiscrollview
- map
- swiftUI
- Clean Code
- ios
- 리팩토링
- collectionview
- HIG
- Protocol
- 스위프트
- combine
- rxswift
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] UIScreenEdgePanGestureRecognizer 개념 본문
UIScreenEdgePanGestureRecognizer 개념

- edge pan이라는 이름에서도 볼 수 있듯이 아이폰의 가장장리 부분으로부터 안쪽으로 드래그하면 동작하는 제스쳐
- 이 인스턴스의 프로퍼티 중 알아야 하는 것은 edges
- edges: 드래그의 시작점 (top, left, bottom, right, all)
let edgePanGesture = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleEdgePan(_:)))
edgePanGesture.edges = .left
view.addGestureRecognizer(edgePanGesture)
ex) edgePanGesture를 등록하여 왼쪽에서 오른쪽으로 드래그하면 뷰의 배경색상을 변경하는 코드
class VC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
let edgePanGesture = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleEdgePan(_:)))
edgePanGesture.edges = .left
view.addGestureRecognizer(edgePanGesture)
}
@objc func handleEdgePan(_ gesture: UIScreenEdgePanGestureRecognizer) {
if gesture.state == .recognized {
view.backgroundColor = UIColor(red: CGFloat.random(in: 0...1),
green: CGFloat.random(in: 0...1),
blue: CGFloat.random(in: 0...1),
alpha: 1.0)
}
}
}

주의사항) swipe back 중복 제스처는 안됨
- edges = .left로 설정한 경우, 왼쪽에서 오른쪽으로 스와이프할 때 navigationController의 swipe back이 활성화 되어있으면 swipe back만 우선 수행됨
ex) UIScreenEdgePanGestureRecognizer로 edges = .left로 걸어놓고 이 제스처가 먹으면 view.backgroundColor를 변경해주는 코드
class ViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let vc = VC()
let vc2 = VC()
let navi = UINavigationController(rootViewController: vc)
present(navi, animated: true, completion: {
navi.pushViewController(vc2, animated: true)
})
}
}
class VC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
let edgePanGesture = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleEdgePan(_:)))
edgePanGesture.edges = .left
view.addGestureRecognizer(edgePanGesture)
}
@objc func handleEdgePan(_ gesture: UIScreenEdgePanGestureRecognizer) {
if gesture.state == .recognized {
view.backgroundColor = UIColor(red: CGFloat.random(in: 0...1),
green: CGFloat.random(in: 0...1),
blue: CGFloat.random(in: 0...1),
alpha: 1.0)
}
}
}

* 참고
- https://developer.apple.com/documentation/uikit/uiscreenedgepangesturerecognizer
'iOS 응용 (swift)' 카테고리의 다른 글
Comments
jake-kim님의
글이 좋았다면 응원을 보내주세요!