[iOS] PhotoKit 활용 - 갤러리 사진 가져오기 (1/2)

2020. 9. 6. 05:13iOS

반응형

이번에 SKT 공모전 앱을 개발하면서 커스텀 된 카메라를 만들고 촬영한 사진을 iPhone의 사진에 저장하여야하는 기능이 있었습니다. 

 

보통 카메라를 사용하거나 iPhone의 사진에 접근할 때, 다들 UIPickerController을 사용해서 하였던 경험이 있으신가요⁉️

 

저는 주로 UIPickerController을 사용했었는데요...

 

이번에는 커스텀이 필요하고 사진 역시 갤러리에서 마지막의 사진만 가져와서 표시하여야했기 때문에 어떤 기능을 사용하여야 하는지 찾아보았습니다.

 

PhotoKit 프레임워크를 활용하면 이를 활용할 수 있다고 해서 한 번 같이 공부해보도록 할게요~~


PhotoKit 란?

우선 애플 공식 개발자 문서를 보게 되면 다음과 같이 설명이 되어 있습니다.

In iOS and macOS, PhotoKit provides classes that support building photo-editing extensions for the Photos app. In iOS, macOS, and tvOS, PhotoKit also provides direct access to the photo and video assets managed by the Photos app.

직독직해를 해보자면 iOS와 MacOS에서 사진의 편집 기능을 제공해주고 또한 사진이나 비디오의 데이터에 직접적으로 접근하고 데이터를 제공할 수 있다고 나와있습니다.

 

즉, PhotoKit을 이용하면 갤러리에 접근해서 필요한 값들을 가져올 수 있다는 것이겠죠⁉️

 

 

그렇다면 간단하게 PhotoKit이 어떤 기능을 담당해주는지 알아보았으니 사용하기 위해 어떤 객체들이 있는지 살펴볼까요.


PHPhotoLibrary

앱의 사용자가 사진 라이브러리에 대해 접근 권한 및 변경 등을 관리하는 객체입니다. 싱글톤으로 관리되고 있는 객체입니다. 

PHPhotoLibrary 객체는 로컬 디바이스와 iCloud Photos에 있는 모든 Asset과 Collection들을 모두 대표합니다.

 

다음과 같은 작업에 사용할 수 있습니다.

  • 사진의 사용을 위한 유저의 권한을 획득할 수 있다.
  • Asset 및 Collection을 변경할 수 있다.
  • 라이브러리가 변경될 때, 등록된 메세지를 전송할 수 있다.

 

PHAsset

이미지와 비디오 그리고 iPhone의 Live Photo을 대표하는 타입이다.

사진, 비디오 등에 어떤 작업을 하기 위해서는 Asset 데이터를 가져와야 한다. PHAsset의 메소드를 이용해서 원하는 Asset을 Fetching 해 올 수 있습니다.

 

Asset은 단지 메타 데이터일 뿐입니다. 즉, 어떤 썸네일 이미지를 가져와야할 경우에는 PHImageManager 객체를 사용하여야 합니다.

 

Asset 객체는 변경할 수 없습니다. 데이터를 편집하기 위해서는 PHAssetChangeRequest 객체를 photo library change block에 생성하여야 합니다.

 

PHCollection

PHCollectionPHAssetCollectionPHCollectionList의 abstract superclass 입니다. 

이 객체를 직접적으로 생성하거나 작업하면은 안됩니다. 대신 PHAssetCollection, PHCollectionList을 사용하면 됩니다.

 

PHCollectionList

Asset의 모음이라고 생각하면 될 것 같습니다. 예를 들면, 순간들, 연도별, 유저가 만든 폴더 등의 앨범이라고 생각하면 됩니다.

이 객체의 데이터를 가져오기 위해서 PHCollectionfetchCollections(in:options:)  메소드를 사용합니다.

또한 어떤 폴더의 최상위 폴더를 찾기 위해서 fetchTopLevelUserCollections(with:)을 사용할 수 있습니다.

 

PHCollectionList도 역시 변경할 수 없습니다. 폴더를 생성, 삭제, 재배치, 업데이트하기 위해서는 PHCollectionListChangeRequest 객체를 photo library change block에 생성하여야 합니다.

 

PHAssetCollection

위의 PHCollectionList와 다른 점이라 한다면 이 객체는 에셋의 Group이라는 것입니다. 

이 객체 역시 직접 참조하지 않고 fetchAssets(:options:)의 메소드를 사용해서 특정 데이터를 가져와야 합니다.

 

PHFetchResult

Photos의 Fetch 작업으로부터 반환된 Asset 또는 Collections의 집단입니다.

NSArray에서 사용하는 것과 동일하게 접근하여 데이터를 사용할 수 있습니다.

 

PHFetchOptions

데이터를 가져오기 위해 필터링, 솔팅 등 어떤 옵션을 줄 수 있는 객체입니다. 이를 활용해 원하는 데이터만 뽑아내거나 정렬을 할 수 있습니다.

필터링이나 정렬을 하기 위해서 predicate, sortDescriptors 프로퍼티을 활용해서 기능을 이용할 수 있습니다.

 

 

 

오늘은 PhotoKit을 전부는 뜯어보지 못했지만 적어도 사용하기 위해 이 정도의 객체가 있다~~를 알아봤어요‼️

 

다음 포스팅에서는 이제 직접적으로 PhotoKit을 사용하여 갤러리 데이터를 가져오는 작업을 해볼게요~~


참고 레퍼런스

반응형