iOS & Swift 공부 - Modal

kevinkim2586·2021년 1월 28일
0

iOS & Swift

목록 보기
57/102

  • 사용자의 이목을 끌기 위해 사용하는 화면 전환 기법

  • 엄밀히 말하면 화면 "전환"은 아니고, 다른 화면을 현재 화면 위로 present 하여 표현하는 방식 (present modally)

  • Modal 로 보이는 화면을 사라지게 하려면 특정 "선택"이 동반되어야 한다.

    → 메일 앱에서 "취소" 또는 "전송" 버튼 클릭

→ 모달은 Navigation Interface 와는 달리 정보의 흐름을 가지고 화면을 이동한다기 보다는 " 이목 " 을 끌어야하는 화면에서 사용

→ Navigation Interface 를 통해 화면을 표현하는 것과는 용도가 많이 다름

→ 그래서 Modal 로 보이는 화면은 되도록 단순 하고 사용자가 빠르게 처리 할 수 있는 내용을 표현하는 것이 좋음

Presenting a View Controller


  • View Controller 의 present 기능은 UIViewController 클래스에 내장되어 있음 (모든 인스턴스가 사용 가능)

  • present 를 통해 "presentend view controller" 가 형성됨. 해당 뷰 컨트롤러는 dismiss 가 될 때까지 화면에 유지된다.

  • presenting view controller ←→ presented view controller 관계 형성

The Presentation and Transition Process


  • UIKit 에 내장되어 있는 present 를 이용하여 새로운 콘텐츠 표시 가능

Presentation Style

→ Presentation Style 에 따라 화면에 나타나는 모양이 달리진다.

  • UIKit 에서 기본적으로 특정한 모양과 의도를 가진 많은 표준 presentation style 을 정의함
  • modalPresentationStyle 프로퍼티에 적절한 상수를 할당하면 됨

Full-Screen Presentation Style

→ 화면 전체를 덮는다.

  • 아래(underlying) 기본 콘텐츠와 상호작용을 방지한다.

Popover Style

→ UIModalPresentationPopover

  • View controller 를 팝오버뷰로 나타내는 것
  • 추가 정보, 포커스, 선택한 객체와 관련된 항목 목록을 표시하는 데 아주 유용
  • 팝업 뷰 외부에 탭을 하게 되면 자동으로 팝업을 닫음 (dismiss)

→ Popover style 은 iPad에서만 지원됨 (넓은 화면 때문)

Transition Styles

→ 전환 스타일은 View Controller 를 표시하는데 사용하는 animation 유형을 결정한다.

  • modalTransitionStyle 프로퍼티 사용
    → Standard slide-up transition

Presenting vs. Showing a View Controller


  • UIViewController 클래스는 기본적으로 View Controller 를 표시하는 2가지 방법을 제공한다.
  1. showViewController(sender: )& showDetailViewController(sender)

→ View controller 를 표시하는 데 가장 적응성이 우수하고 유연한 방법 제공

→ 기본 동작은 view controller 를 modal 방식으로 표시한다

2. presentViewController(animated: completion:)

→ View controller 를 항상 modal 방식으로 표시한다.

Presenting a View Controller


→ presentation 을 시작하는 방법은 여러 가지 있음

  • Segue 를 사용하는 방법 (Interface Builder 에서 정의 (identifier 사용))
  • showViewController:sender: 또는 showDetailViewController:sender: 메서드 사용
  • presentViewController:animated:completion:메서드를 호출하여 뷰 컨트롤러를 모달로 나타내기

Dismissing a Presented View Controller


  • 나타난 뷰 컨트롤러를 닫으려면 dismiss(animated:completion:) 메서드 호출
  • 별도로 저장된 강한 참조가 없는 경우, view controller 를 닫으면 연결된 뷰 컨트롤러가 메모리에서 release 된다.

Presenting a View Controller Defined in a Different Storyboard


(아예 다른 main.storyboard 파일을 이야기하는 것)

  • 다른 스토리보드 간의 Segue 를 생성할 수는 없음
let storyboard: UIStoryboard = UIStoryboard(name: "SecondStoryboard", bundle: nil)
if let myViewController: MyViewController = storyboard.instantiateViewController(withIdentifier: "MyViewController") as? MyViewController {
	// 뷰 컨트롤러를 구성 합니다.
	
	// 뷰 컨트롤러를 나타냅니다.
	self.present(myViewController, animated: true, completion: nil)
}

let storyboard: UIStoryboard = UIStoryboard(name: "SecondStoryboard", bundle: nil)
if let myViewController: MyViewController = storyboard.instantiateViewController(withIdentifier: "MyViewController") as? MyViewController {
// 뷰 컨트롤러를 구성 합니다.

// 뷰 컨트롤러를 나타냅니다.
self.present(myViewController, animated: true, completion: nil)

}

profile
맛있는 프로그래밍

0개의 댓글