UINavigationController 사용하기: 화면 전환 네비게이션
UINavigationController 사용하기: 화면 전환 네비게이션
iOS 개발을 할 때 화면 전환은 매우 중요한 요소 중 하나입니다. UINavigationController
는 iOS 앱에서 여러 화면을 계층 구조로 관리하고 사용자 간의 화면 전환을 쉽게 할 수 있도록 도와줍니다. 이 글에서는 UINavigationController
를 사용하여 화면 전환과 네비게이션을 구현하는 방법을 자세히 알아보겠습니다.
UINavigationController란 무엇인가?
UINavigationController
는 iOS 앱의 화면간 이동을 관리하는 중요한 클래스입니다. 보통 스택(stack) 구조를 사용하여 ViewController들을 관리합니다. 최근에 추가된 ViewController가 스택의 가장 위에 쌓이고, 사용자가 뒤로 가기를 하면 스택의 최상단 ViewController가 제거됩니다. 이 과정이 push
와 pop
동작입니다.
주요 역할 및 기능
- 화면 스택 관리: 화면 전환 시 ViewController들을 스택 구조로 저장하고 관리합니다.
- 내비게이션 바(Navigation Bar): 화면 상단에 내비게이션 바를 제공하여 타이틀, 버튼 등을 표시할 수 있습니다.
- 애니메이션 효과: 화면 전환 시 자연스러운 애니메이션을 제공합니다.
UINavigationController 사용하기
기본 설정
- 새 프로젝트 생성: Xcode를 열고 새 프로젝트를 생성합니다. 템플릿으로 'Single View App'을 선택합니다.
- Initial ViewController 설정: 스토리보드에서 첫 번째 ViewController를 선택하고,
Editor > Embed In > Navigation Controller
를 선택하여 Navigation Controller에 포함시킵니다. 이렇게 하면 기본 구조가 설정됩니다. - 추가 ViewController 만들기: 새로운 ViewController를 스토리보드에 추가하고, 필요한 UI 요소들을 배치합니다.
코드로 UINavigationController 사용하기
스토리보드를 사용하지 않고 코드로 UINavigationController
를 설정하는 방법도 있습니다. 매우 간단합니다.
swiftimport UIKit class FirstViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white title = "First View" let nextButton = UIButton(type: .system) nextButton.setTitle("Next", for: .normal) nextButton.addTarget(self, action: #selector(showNextViewController), for: .touchUpInside) nextButton.frame = CGRect(x: 100, y: 100, width: 100, height: 50) view.addSubview(nextButton) } @objc func showNextViewController() { let secondViewController = SecondViewController() navigationController?.pushViewController(secondViewController, animated: true) } } class SecondViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white title = "Second View" } }
위 코드에서는 첫 번째 ViewController(FirstViewController
)에서 버튼을 눌렀을 때 두 번째 ViewController(SecondViewController
)로 이동하도록 설정하였습니다.
네비게이션 바 커스터마이징
UINavigationController
를 사용하면 네비게이션 바를 다양하게 커스터마이징할 수 있습니다. 네비게이션 바의 색상, 타이틀 그리고 버튼 등을 커스터마이징하여 앱의 디자인을 더욱 미려하게 만들 수 있습니다.
타이틀 설정
네비게이션 바의 타이틀은 UIViewController
의 title
속성으로 설정할 수 있습니다. 위 코드 예제에서도 보았듯이, 각 ViewController의 viewDidLoad
메서드에서 title
을 설정하면 네비게이션 바에 자동으로 표시됩니다.
왼쪽/오른쪽 버튼 추가
네비게이션 바에 버튼을 추가하는 것도 간단합니다. UIBarButtonItem
를 사용하여 왼쪽 혹은 오른쪽에 버튼을 추가할 수 있습니다.
swiftoverride func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white title = "First View" navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(doSomething)) } @objc func doSomething() { print("Button tapped") }
위 코드는 네비게이션 바의 왼쪽에 +
버튼을 추가하는 방법을 보여줍니다.
UINavigationController의 고급 기능
대규모 앱에서의 UINavigationController 사용
대규모 앱에서는 UINavigationController
를 더 잘 활용하기 위해 몇 가지 고급 기법이 요구됩니다. 특히, 화면이 많고 복잡할 때는 트랜지션 애니메이션, 커스텀 전환, 상태 복구 등에 신경 써야 합니다.
상태 복구
iOS에서 화면 전환 상태를 복구하는 것은 특히 중요한 주제입니다. 이 과정에서는 UIViewControllerRestoration
프로토콜을 구현하여 복구할 수 있습니다.
커스텀 트랜지션 애니메이션
애니메이션 효과를 커스터마이징하여 사용자 경험을 향상시킬 수 있습니다. 이는 UIViewControllerAnimatedTransitioning
프로토콜을 구현하여 할 수 있습니다.
swiftclass CustomAnimator: NSObject, UIViewControllerAnimatedTransitioning { func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { return 0.5 } func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { let containerView = transitionContext.containerView guard let toView = transitionContext.view(forKey: .to) else { return } containerView.addSubview(toView) toView.alpha = 0.0 UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: { toView.alpha = 1.0 }, completion: { finished in transitionContext.completeTransition(finished) }) } }
이와 같이 커스텀 애니메이션을 적용하여 더 화려한 화면 전환 효과를 만들 수 있습니다.
결론
UINavigationController
는 iOS 앱 개발에서 매우 중요한 기능을 제공하며, 이를 올바르게 이해하고 활용하는 것은 앱의 사용자 경험을 크게 향상시킬 수 있습니다. 이번 글에서는 기본 개념, 설정 방법, 네비게이션 바 커스터마이징, 고급 기능 등을 다루어 보았습니다. 이를 통해 여러분의 iOS 앱을 더 매력적으로 만드시길 바랍니다.