[ios] PHPickerViewController 사용하기

Cobugi·2022년 4월 8일
0
post-thumbnail

PHPickerViewController

인스타그램 클론 앱 만들기 하다가 피드 이미지를 선택하는 기능을 구현해야했다
이때 사용한 PHPickerViewController에 대해 정리한다

사용하기

  1. PhotosUI를 import 한다

    import PhotosUI
  2. configuration 설정

    • PHPickerConfiguration()을 만들고 이를 통해 이미지 피커에 대한 설정을 해준다
    var config = PHPickerConfiguration()
    config.filter = .images
    config.selection = .ordered
    config.selectionLimit = 0
  3. PHPickerViewController 만들기

    • 위에서 만든 config를 PHPickerViewController이 초기화할 때 넣어주면 된다
    let imagePickerViewController = PHPickerViewController(configuration: config)
  4. PHPickerViewControllerDelegate 채택하기

    • 선택한 사진들을 컨트롤하고 싶으면 델리게이트를 채택해야한다
    imagePickerViewController.delegate = self
    
    extension UploadFeedViewController: PHPickerViewControllerDelegate {  }
  5. present 하기

    present(imagePickerViewController, animated: true)
    • 결과
  6. 델리게이트에서 didFinishPicking 메서드 구현

    • 선택이 끝나면 선택된 사진들이 [PHPickerResult] 형식으로 나온다
    • 이 배열을 돌면서 itemProvider를 만든다
    • 이 itemProvider가 UIImage형식으로 변환시킬 수 있다면(canLoadObject(ofClass: UIImage.self)), 변환시킨다(loadObject(ofClass: UIImage.self, completionHandler: ...))
    • 마지막으로 dismiss
    extension UploadFeedViewController: PHPickerViewControllerDelegate {
        func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
                results.forEach { result in
                    let itemProvider = result.itemProvider
                    if itemProvider.canLoadObject(ofClass: UIImage.self) {
                        itemProvider.loadObject(ofClass: UIImage.self) { image, error in
                            if let image = image as? UIImage {
                            	// 이미지 처리는 여기서...
                                /*
                                	만약 이 부분에서 UI 변경 관련 코드를 작성할 때는
                                    DispatchQueue를 사용해 main에서 실행해줘야한다
                                */
                            }
                            if let error = error {
                            	// 에러 처리는 여기서...
                            }
                        }
                    }
                }
            dismiss(animated: true)
        }
    }

소스코드

  • 틀렸거나 고쳐야할 점이 있다면 연락주시면 감사하겠습니당!

추가

YPImagePicker

  • 인스타그램의 사진 선택하는 것과 비슷한 이미지 피커이다
  • 한번 연습 삼아 써봤는데 이쁘다
profile
iOS Developer 🐢

0개의 댓글