티스토리 뷰

Tech/iOS

iOS Photos 프레임워크 사용

Ellie Kim 2018. 10. 8. 18:53


Photos프레임워크


Photos프레임워크는 iCloud , 사진 라이브러리, 라이브사진을 포함한 Photos 앱에 관리되는 사진이나 비디오 에셋으로 작업합니다.

전체 사이즈의 에셋, 썸네일등을 비동기적으로 가져오거나 캐쉬처리 합니다. 


아래 클래스들은 사진 라이브러리의 내용을 나타냅니다.

클래스의 인스턴스는 읽기 전용(read only)이며 변경이 불가합니다. (메타 데이터 만 포함)


PHAsset 클래스는 사진 라이브러리의 이미지, 비디오 또는 라이브 사진을 나타냅니다.


PHAssetCollection 클래스는 포토 에셋의 그룹을 나타냅니다.


PHCollectionList 클래스는 포토 에셋 컬렉션을 포함하는 그룹을 나타냅니다. 

(PHCollectionList가 PHAssetCollection을 PHAssetCollection이 PHAsset을 포함하는 느낌입니다.)


PHCollection 클래스는 추상클래스이며 사진 에셋 컬렉션, 컬렉션 리스트의 슈퍼 클래스입니다.


PHObject 클래스는 추상클래스이며 Photos 모델 객체 슈퍼 클래스입니다. 


PHFetchResult 클래스는 사진들을 가져오는 메소드에 리턴되는 에셋. 컬렉션의 정렬된 목록입니다.


PHFetchOptions 클래스는 에셋 컬렉션 객체를 가져올 때 반환 결과의 필터링, 정렬 및 관리에 영향을 주는 옵션입니다.


에샛 및 컬렉션을 사용하려면 여기 클래스를 사용하여 지정된 쿼리와 일치하는 객체를 가져옵니다.




사용하기


* 먼저 Photos 프레임워크를 사용하려면 애플리케이션에서 사용자로부터 액세스 권한 승인을 받아야합니다.

info.plist에서 Privacy - Photo Library Usage Description 을 추가 해줘야합니다.


사진첩의 구조는 이렇게 해주었습니다.


Navigation Controller로 연결해 컬렉션 뷰의 셀을 클릭하면 크게 보기가 가능합니다.




Photos프레임워크를 사용하기 위해 import Photos를 시켜줍니다.

colletionView를 iBOutlet을 걸어주어 컨트롤러에서 접근 가능하게 해주었습니다. 


PhotoViewController에

var imagesFetch : PHFetchResult<PHAsset>!

let imageManager = PHCachingImageManager()을 선언해줍니다.


(PHFetchResult클래스는 에셋이나 컬렉션의 리스트로 fetch한 결과물의 목록입니다.

imagesFetch를 선언해 PHAsset결과값을 받을 변수 생성해줍니다.

PHCachingImageManager클래스는 대량의 에셋을 일괄적으로 로드하기 위한것으로 에셋, 썸네일, 풀사이즈 이미지 또는 비디오 데이터를 검색하거나 생성하는 방법을 제공합니다.)



viewDidLoad()즉 뷰의 로드가 끝났을때 fetch를 위해 함수를 호출합니다. 



PHFetchOption클래스는 에셋, 컬렉션 객체를 가져올때 반환한 결과의 필터링, 정렬 및 관리에 영향을 주는 옵션입니다.

해당 객체 변수 fetchOptions를 만들어 key값 creationDate에 따라 생성된 날짜를 오름차순을 false로 두어 최신순이 먼저 보이게 정렬을 했습니다. 

만약 ascending이 true이면 과거순으로 보이게 됩니다. 

fetchOption의 옵션대로 fetch한 PHAsset을 imageFetch에 넣습니다.


= 즉 requestImage함수를 통해 사진첩의 사진들을 fetch해 imageFetch에 넣어주는 작업을 처리합니다.



컬렉션뷰에 셀을 몇개를 리턴할지는 collectionview의 numberOfItemInSection메소드에 작성해줍니다. 

imagesFetch에 있는 이미지 개수만큼 리턴해줍니다..




collectionview의 cellForItemAt메소드에는 fetch된 PHAsset목록이 담긴 imageFetch를 통해  인덱스에 맞게 이미지를 넣어줍니다.



대략적인 순서는 

1. 먼저 사진을 fetch해줍니다. 

2. fetch된 사진들을 imagesFetch에 넣어줍니다.

3. numberOfItemsInSection을 통해 imagesFetch의 카운트에 맞게 셀 갯수 리턴을 합니다.

4. cellForItemAt을 통해 컬렉션 뷰 셀에 imageFetch의 인덱스에 맞게 이미지를 넣어준 후 셀을 리턴해줍니다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함