[iOS] Photos

Martin Kim·2021년 8월 14일
2

iOS

목록 보기
7/11
post-thumbnail

Photos

  • Photos은 iOS, tvOS에서 사진, 비디오에 접근하기 위한 프레임워크이다.
  • Photos을 사용하려면 import Photos를 선언해주면 된다.
  • Photos는 프레임워크를 사용하여 에셋을 검색하고 에셋을 사용하여 미디어를 요청하는 작업할 수 있다.

Asset (이미지, 비디오, 라이브 포토 등 각각의 미디어 개체)

Asset Collection (애셋들을 모아놓은 앨범, 특별한 순간)

Collection List (앨범 폴더, 특별한 순간)

  • 이러한 애셋들은 오직 메타 데이터만 가지고 있지 실제 그 이미지나 비디오를 가지고 있는건 아니라서 PHImageManager 객체들을 이용해 애셋의 이미지를 가져오거나 AVFoundation을 이용해 비디오를 로드해야 한다.
  • 만약 변경 요청을 하려면 변경 요청 객체를 만들고 PHPhotoLibrary 객체에 알려줘야한다.

PHPhotoLibrary

  • 이 객체를 이용해 사진 콘텐츠에 접근, 애셋 및 컬렉션을 변경하도록 애플리케이션의 사용자 권한을 얻는다. 권한을 얻으면 사진 라이브러리가 변경되면 변경사항을 받을 수 있다. info.plist에 이러한 내용을 기술한다.

에셋 검색에 관련된 클래스

PHAsset

  • 사진 라이브러리 이미지, 비디오, 라이브 포토

PHAssetCollection

  • 특별한 순간, 사용자정의 앨범, 스마트 앨범 등의 에셋 그룹

PHCollectionList

  • 에셋 컬렉션 그룹

PHFetchResult

  • fetch 메서드에서 반환된 에셋 또는 컬렉션 목록인데 선언이 제네릭으로 되어있어서 보통 다음과 같이 사용한다.
let result: PHFetchResult<PHCollectionList> = 
    PHCollectionList.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumUserLibrary, options: nil)

PHFetchOptions

  • 에셋 또는 컬렉션 객체를 가져올때 필터링, 정렬 등의 옵션을 주는 객체

에셋 콘텐츠 로딩

PHImageManager

  • 썸네일 이미지 및 에셋 데이터를 쉽게 검색하거나 생성하기 위한 객체인데, 여기 있는 메소드를 사용해서 전체 크기 사진이나 온전한 사진, 썸네일을 가져올 수 있다.

PHCachingImageManager

  • 많은 양의 에셋을 한번에 로딩하기 위해 최적화 되어 있는데, 위의 PHImageManager와는 달리 미리보기 썸네일을 검색하거나 생성할 때 사용한다.
  • 예를 들어 사진 또는 비디오 에셋 썸네일을 이용해서 컬렉션 뷰 셀 같은 객체를 채우려면 PHImageManager 보다는 이걸 사용하는게 더 낫다.
  • 많은 에셋이 필요할 때 빠른 성능을 위해서 이 객체는 지연을 방지하려고 에셋 이미지를 백그라운드에서 준비해두기 때문.

PHImageRequestOptions

  • 이미지 매니저에 요청한 에셋 이미지에 적용되는 옵션

PHVideoRequestOptions

  • 이미지 매니저에 요청한 비디오 에셋에 적용되는 옵션

PHLivePhotoRequestOptions

  • 이미지 매니저로부터 요청한 라이브 포토 에셋에 적용되는 옵션

PHLivePhoto

  • 캡처 직전과 직후 순간의 움직임 및 소리가 포함된 라이브 사진 애셋

변경 요청

PHAssetChangeRequest

  • 사진 라이브러리 변경을 요청하는 에셋의 생성, 삭제, 메타 데이터 수정 변경 객체

PHAssetCollectionChangeRequest

  • 애셋 컬렉션의 생성, 삭제, 수정 변경 요청 객체

PHCollectionListchangeRequest

  • 컬렉션 리스트의 생성, 삭제, 수정 변경 요청 객체

정리하자면 앱에서 이미지를 가져오기 위한 메커니즘은 다음과 같다.

  1. 에셋을 fetch하기 위해 PHFetchResult 객체를 선언하고 가져오려는 해당 에셋 종류의 클래스에 있는 fetch 메소드를 이용해서 에셋을 가져온다
  2. 가져온 에셋으로 이미지 매니저를 통해 실제 이미지 데이터를 요청한다.
  3. 변경 사항이 있으면 PHAssetChangeRequest 같은 변경 요청 객체를 생성하고 이미지 매니저를 통해 요청한다.

출처: 네이버 부스트코스 iOS 앱 프로그래밍

profile
학생입니다

0개의 댓글