UIKit

PHPicker

unchainks 2022. 12. 12. 20:50
PHPicker는 iOS14부터 적용가능한 기술입니다.
이전에 사용하던 UIImagePickerController에서 일부 기능들이 defrecated되면서 iOS14이상을 지원하는 앱에서는 PHPicker를 사용하기를 권장하고 있습니다.

 WWDC영상만 보고도 바로 적용이 가능했기 때문에 WWDC만 참고 했습니다. 여기서 설명하는 flow는 위의 사진과 같습니다.

 

사용방법

1.  PhotosUI

 - PhotosUI 프레임워크에 있기 때문에 PhotosUI를 import해서 사용합니다.

 

2.  PHPickerConfiguration

PHPickerViewController(configuration: configuration)

- PHPickerViewController는 초기화 할 때 configuration이 필요하기 때문에 PHPickerConfiguration을 먼저 설정합니다.

- 저는 UI를 위와 같이 클로저의 형태로 만드는 것을 선호하기 때문에 configuration설정을 위와 같이 해 줬습니다.

1) selectionLImit: picker에서 한번에 선택할 이미지의 갯수를 지정하는 프로퍼티입니다. 기본값은 1이고 갯수에 제한을 두고 싶지않다면 0으로 설정하면됩니다.

 

2) filter: 기본값은 nil이며 nil로 설정하면 모든 asset타입을 표시 한다는 것입니다. filter내부에 들어가는 값으로는 videos, livePhotos, images 이렇게 3가지 입니다.

 

3.  PHPickerViewControllerDelegate

 이렇게 picker를 통해서 가져온 정보를 내가 원하는대로 사용하기 위해 delegate메서드를 사용해야합니다.

wwdc에서 소개하고 있는 PHPickerViewController delegate method

 유저가 선택한 asset들은 위 메서드에서 results를 통해 가공됩니다.

 여기서 주의해야 할 점은 itemProvider.loadObject를 통해 얻어지는 결과값이 NSItemProviderReading타입이기 때문에  UIImage로 타입 캐스팅해서 넣어줘야 합니다.

 또 itemProvider api는 background async이기 때문에 저 내부에서 UI관련 업데이트를 하고싶다면 main쓰레드에서 돌려야 합니다.