-
Swift PHPicker로 여러 이미지를 가져오기iOS/Swift 2022. 1. 22. 21:07
안녕하세요!! 이번엔 Swift의 PHPickerViewController에서 이미지를 가져오는 방법에 대해서 정리했습니다.
이번 글도 노션에서 옮겨와 말이 짧습니다!! 양해해주세용😽
이번에 앱을 만들면서 구현해야 하는 기능 중에 여러장의 사진을 선택해서 업로드 할 수 있는 기능을 넣어야했다.
맨 처음에는 단순하게 ImagePicker로 구현하면 되겠지~ 했는데
ImagePicker에는 여러장을 한번에 선택할 수 있는 기능이 존재하지 않았다(...)
iOS 14 이상에서는 새로 나온 PHPicker를 적용할 수 있지만, Mappin 앱의 최소 지원 버젼이 iOS 13이라 라이브러리를 더 찾아봐야 할 것 같다.
iOS 14이상은 PHPicker를 사용할 수 있도록 코드를 작성해봤다.
@available(iOS 14, *) func makePHPicker() -> PHPickerViewController { var configure = PHPickerConfiguration() configure.selectionLimit = 10 configure.filter = .images let picker = PHPickerViewController(configuration: configure) picker.delegate = self return picker }
PHPicker를 정의하고 반환하는 함수를 만들었다. 먼저, PHPicker의 Configuration을 설정해야한다.
selectionLimit는 라이브러리에서 선택할 수 있는 사진의 갯수를 의미한다. 0으로 두면 제한이 없어진다.
filter는 이미지 파일, 라이브포토 파일, 비디오 파일 중 원하는 파일 타입을 설정할 수 있다.
Configuration을 설정하고 난 뒤, PHPicker 객체를 만들 때 작성해둔 configuration을 매개변수로 넣어주면 된다.
그리고 ImagePicker를 사용할 때 처럼, delegate를 해주어야 한다.
var photoImages: [UIImage] = [] //MARK: PHPicker Delegate extension AddPinViewController: PHPickerViewControllerDelegate { @available(iOS 14, *) func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { picker.dismiss(animated: true, completion: nil) if !(results.isEmpty) { photoImages.removeAll() for result in results { let itemProvider = result.itemProvider if itemProvider.canLoadObject(ofClass: UIImage.self) { itemProvider.loadObject(ofClass: UIImage.self) { [weak self](image, error) in self?.photoImages.append(image as! UIImage) } } } } } }
그리고 PHPicker의 delegate 메소드인 didFinishPicking에서 선택한 사진에 대한 처리를 해주어야 한다.
딱 봐도 results에 내가 고른 사진이 담겨있는 것 같았다.
먼저, picker를 dismiss시켜주고,
사용자가 라이브러리에서 사진을 선택했을 경우 기존 사진들이 삭제되고 사용자가 선택한 이미지를 넣을 수 있게끔
사진을 담아두는 photoImages의 값을 초기화 시켜주었다.
그리고 results를 순회하면서 UIImage로 로드할 수 있는 객체라면, UIImage로 타입캐스팅을 한 뒤 photoImage에 추가해주는 작업을 하도록 했다.
이렇게 하면 배열에 선택한 이미지를 담을 수 있다. 이제 이 이미지 배열을 원하는 곳에 사용하면 된다 😃
'iOS > Swift' 카테고리의 다른 글
Firebase Auth 적용하기(전화번호 인증, Swift) (0) 2022.02.04 앱에 Firebase Crashlytics 추가(Swift) (0) 2022.01.27 Google Maps SDK for iOS 정리 (0) 2022.01.22 앱에 데이터 백업, 복구 기능 추가하기(Swift) (0) 2022.01.22 Realm-cocoa 라이브러리 활용해보기(Swift) (0) 2022.01.22