AVPlayer를 어플 안의 pip(picture in picture)로 만들어 띄어달라는 요청을 받았다.
그것에 대한 자료가 없어 조금 정리해 보기로 한다.
우선 view controler의 구조는 다음과 같다.
nav -> [list] -> [detail] -> [player]
위의 구조에서 player에서 pip 버튼을 누르면 detail 혹은 list화면에서도 보여야한다.
네비게이션이 왔다갔다할때 보이는 view controller 안에 player를 연속으로 넣어야한다.
따라서 navigation animator 쪽과 presentationViewController, prsentedViewController 등을 활용해야 하기에 공식문서를 한국어로 적어본다.
인스턴스 프로퍼티 presentedViewController
uiviewcontroller의 프로퍼티로서 self에 의해 표시된(presented) 뷰컨트롤러. 혹은 뷰컨트롤러 상속 계층 안에 있는 조상 중 하나.
선언
var presentedViewController: UIViewController? { get }
설명
present(_:animated:completion:) 메소드를 사용하여 뷰 컨트롤러를 모달(modal)로 표시(present)할 때, 메소드로 부터 호출된 뷰컨트롤러에 표시된(presented) 뷰컨트롤러가 이 프로퍼티가 세팅된다.
만약 현재 뷰컨트롤러가 다른 뷰컨트롤러를 모달로서 표시하고 있지 않는다면 이 값은 nil이 된다.
인스턴스 프로퍼티 presentingViewContr
선언
var presentingViewController: UIViewController? { get }
설명
present(_:animated:completion:) 메소드를 사용하여 뷰 컨트롤러를 모달(modal)로 표시(present)할 때, 메소드로 부터 호출된 뷰컨트롤러에 표시된(presented) 뷰컨트롤러가 이 프로퍼티가 세팅된다.
만약 뷰컨트롤러가 모달로서 표시된것이 아니라 상속 계층 중 하나로부터 된것이라면 이 프로퍼티는 그 표시된 상속계층안의 조상을 값으로 갖는다. 만약 현재 뷰컨트롤러나 상속 계층 안의 모든조상이 모달로서 표시되지 않았다면 이 값은 nil이 된다.