iOS/Tip
스와이프로 뒤로가기(Swipe Back) 처리
까칠코더
2023. 5. 8. 14:31
반응형
스와이프(Swipe)로 뒤로가기 처리 (iOS 7 이후)
// Swipe Back 지원을 위함
extension UINavigationController: UIGestureRecognizerDelegate {
open override func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
viewControllers.count > 1
}
}
위 코드로는 왼쪽 영역에서 스와이프만 되는데 전체 영역에 스와이프 하기위해서는 다음과 같이 하면 됩니다.
기본 NavigationController 대신에 SwipeNavigationController를 사용하게 되면
왼쪽 절반 영역에서 panGesture 했을때 Swipe Back 기능을 사용할 수 있습니다. (영역 설정은 자유로이 가능)
class SwipeNavigationController: UINavigationController {
private lazy var panGestureRecognizer = UIPanGestureRecognizer()
override func viewDidLoad() {
super.viewDidLoad()
setupView()
}
}
private extension SwipeNavigationController {
func setupView() {
guard let interactivePopGestureRecognizer,
let targets = interecivePopGestureRecognizer.value(forKey: "targets") else {
return
}
panGestureRecognizer.setValue(targets, forKey: "targets")
panGestureRecognizer.delegate = self
view.addGestureRecognizer(panGestureRecognizer)
}
}
extension SwipeNavigationController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
gestureRecognizer.location(in: view).x <= view.center.x && viewControllers.count > 1
}
}
반응형