[iOS] UIDocumentInteractionController

728x90

앱에서 직접 파일 형식을 처리 할 수 없는 파일을 미리보기와 파일을 다른앱에 전송해주는 컨트롤러 대해 알아 보겠습니다.

 

UIDocumentInteractionController

앱에서 직접 파일 형식을 처리 할 수 없는 파일을 미리보기와 파일을 다른앱에 전송해주는 컨트롤러입니다.

 

아이폰을 사용하실때 이런 화면을 많이 보셨을거에요

UIDocumentInteractionController에 대해 알아보겠습니다.
사용법도 간단합니다.

 

DocumentInteraction 프로젝트를 만들고
Preview 버튼 + 버튼을 만들었습니다.

 

class ViewController: UIViewController {

    /***************************************
     UIDocumentInteractionController()
     앱에서 직접 파일 형식을 처리 할 수 없는 파일을 미리보기와 파일을 다른앱에 전송해주는 컨트롤러입니다.
     ****************************************/
    
    //UIDocumentInteractionController객체 생성
    let documentInteraction = UIDocumentInteractionController()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupInteractionController()
    }

    func setupInteractionController() {
        
        documentInteraction.delegate = self
        
        //미리보기 할 파일 documentInteraction에 path 설정
        documentInteraction.url = Bundle.main.url(forResource: "iPhone", withExtension: "png")

    }
    
    // Preview 버튼
    @IBAction func filePreview(_ sender: UIButton) {
        documentInteraction.presentPreview(animated: true) // presentPreview
    }
    
    //+ 버튼
    @IBAction func fileSend(_ sender: UIButton) {
        //presentOptionsMenu만 호출해주면 쉽게 위와 같은 UI가 나타납니다.
        documentInteraction.presentOptionsMenu(from: view.bounds, in: view, animated: true)
    }
}
extension ViewController: UIDocumentInteractionControllerDelegate {
    
    //Preview를 위한 Delegate
    func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
        return self
    }

}

Delegate들이 optional이긴 하지만 Preview를 위해서는
documentInteractionControllerViewControllerForPreview를 설정해주어야 됩니다.
그 외에도 많은 델리게이트가 있지만 메서드 이름에서볼 수 있듯이 쉽게 이용할 수 있습니다.

 

 

Preview버튼 눌렀을시 화면

 

+버튼 눌렀을시 화면

 

간단하죠?
애플에서 제공해주는 documentInteractionControllerViewControllerForPreview을 이용하면 간단한 설정으로 파일을 미리 볼 수 있고, 전송할 수 있습니다.

하지만!

전송할 앱들이 전부 보이는것이 아닙니다!
보이게 하기 위해서는 Targets -> Info -> Document Types에서 받을 파일에 대해 등록해주어야됩니다.

Targets -> Info -> Document Types에서 받을 파일에 대해 등록

 

밑의 이미지처럼 InboxDirectory프로젝트를 하나 더 만들어서 Document Types를 지정해 줬습니다.

image해당 어플에서 받고 싶으면 public.image라고 적어주던가, png파일만 받고싶으면 public.png, 전부 받고싶으면 public.item을 써주면 됩니다.

Apple Documentation UTIs

Apple Documentation UTIs 참고

 

이제 DocumentInteraction 프로젝트로 다시 가서 실행해보면 InboxDirectory앱이 보이게 될겁니다!