Jimmy's iOS

iOS) UINavigationController 왼쪽 스크롤 제스쳐로 팝업 구현 본문

iOS

iOS) UINavigationController 왼쪽 스크롤 제스쳐로 팝업 구현

Jimmy Youn 2021. 9. 27. 00:57

UINavigationController 를 사용해서 커스텀 barButtonItem 을 주면 화면을 왼쪽 스크롤시 자동 팝업이 되는게 불가능했다. 

어떻게 하면 기본 자동 팝업 효과를 줄 수 있을까 찾아보니 GestureRecognizerDelegate 로 해결을 할 수 있었다. 

 

import UIKit 

// 여기서 SecondViewController 는 FirstViewController 에서 네비게이션으로 푸시된 뷰컨이라 가정
class SecondViewController : UIViewController {

override func viewDidLoad() {
  super.viewDidLoad() 
  navigationController?.interactivePopGestureRecognizer?.delegate = self // 1.delegate 선언해준다
  }
 }

//MARK: - UIGestureRecognizerDelegate // 2. UIGestureRecognizerDelegate 선언
extension MyPageViewController : UIGestureRecognizerDelegate {
  func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
  }
}

이렇게 UIGestureRecognizerDelegate 를 활용하면 각각 원하는 네비게이션 컨트롤러에서 자동 팝업 효과를 줄 수 있다. 

 

 

또한 전체 Extension 으로 공통을 만들어서 모든 네비게이션 컨트롤러에서 작동하도록 구현해 줄 수 있다.

extension UINavigationController : ObservableObject, UIGestureRecognizerDelegate {
  override open func viewDidLoad() {
    super.viewDidLoad()
    interactivePopGestureRecognizer?.delegate = self
  }

  public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    return viewControllers.count > 1
  }
}