인스타그램 클론 앱 만들기 하다가 피드 이미지를 선택하는 기능을 구현해야했다
이때 사용한 PHPickerViewController
에 대해 정리한다
PhotosUI
를 import 한다
import PhotosUI
configuration
설정
PHPickerConfiguration()
을 만들고 이를 통해 이미지 피커에 대한 설정을 해준다var config = PHPickerConfiguration()
config.filter = .images
config.selection = .ordered
config.selectionLimit = 0
PHPickerViewController
만들기
let imagePickerViewController = PHPickerViewController(configuration: config)
PHPickerViewControllerDelegate
채택하기
imagePickerViewController.delegate = self
extension UploadFeedViewController: PHPickerViewControllerDelegate { }
present
하기
present(imagePickerViewController, animated: true)
델리게이트에서 didFinishPicking
메서드 구현
[PHPickerResult]
형식으로 나온다itemProvider
를 만든다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)
}
}