반응형
스와이프(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
}
}
반응형
'iOS > Tip' 카테고리의 다른 글
NSCache와 Dictionary로 캐쉬를 구성했을때 차이 (0) | 2023.05.31 |
---|---|
NSOperationQueue와 GCD(Grand Central Dispatch) Queue의 차이점 (0) | 2023.05.31 |
문자열 메모리 해제시 지우기 (0) | 2023.05.25 |
Frame과 Bounds의 차이 (0) | 2023.05.12 |
검색한 문자열의 NSAttributedString 속성 변경 (0) | 2023.05.08 |
문자열 유효성 검사하기 (0) | 2023.05.08 |
UIStackView 하위 뷰 제거하기 (0) | 2023.05.08 |
UIPageViewController Scroll 막기 (0) | 2023.05.08 |