본문 바로가기

Codes Travel/iOS Boost Course #2019

Photos 프레임워크 활용하기!

 

안녕하세요 :)

iOS 개발자 리치(rich_iosdev)입니다.


공유해드릴 내용은 Photos 프레임워크 입니다.


Photos 프레임워크는 아이폰 기본 앱인 사진 앱의 사진 접근을 위한? 프레임워크라고 생각하는데요. 유저가 촬영한 사진을 활용해서 앱을 제작해야 한다면 반드시 알아야 하는 프레임워크 인 것 같습니다.

 

샘플코드를 중심으로 간략하게 설명해드리겠습니다

유저의 사진 앱에 저장된 "Camera Roll"의 사진 가져오기
        let fetchOptions = PHFetchOptions()
        fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
        
        // Camera Roll Asset Collections
        let cameraRolls = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumUserLibrary, options: nil)
        
        disPatchGroup.enter()
        cameraRolls.enumerateObjects(options: .concurrent) { (collection, index, object) in
            let photoInAlbum = PHAsset.fetchAssets(in: collection, options: fetchOptions)
            
            let assetCollectionCount = photoInAlbum.count
            guard let assetCollectiontitle = collection.localizedTitle else { return }
            
            let cameraRolls = PHAsset.fetchAssets(in: collection, options: fetchOptions)
            let width = (self.view.frame.width / 2) - 8
            let height = width
            
            if let firstObject = cameraRolls.firstObject {
                
                let imageRequestOption = PHImageRequestOptions()
                imageRequestOption.version = .original
                imageRequestOption.deliveryMode = .highQualityFormat
                
                self.imageManager.requestImage(for: firstObject, targetSize: .init(width: width, height: height), contentMode: .aspectFill, options: imageRequestOption, resultHandler: { image, _ in
                    guard let image = image else { return }
		// 가져온 이미지들을 이미지뷰에 넣어 줄 수 있음.
                })
            }

Photos 프레임워크에서 사진 데이터들의 단위는 크게 아래 3가지로 나뉠 수 있습니다.

 

부스트코스 이미지 참고

1. Asset Collection List : 사진 컬렉션들의 모음

2. Asset Collection: 사진 컬렉션 1개 (앨범 단위라고 보면 될 듯합니다)

3. Asset: 사진 1장 단위 

 

위 코드는 카메라롤 Asset Collection을 먼저 가져와서 해당 카메라롤 안에 존재하는 사진 데이터인 Asset(사진 1장)들을 가져오는 작업입니다. 가장 상단 코드에서 fetch option의 경우 가장 최근에 생성된 사진 데이터를 먼저 가져오기 위해서 설정해준 것입니다.

let imageManager: PHCachingImageManager = PHCachingImageManager()

전체 코드에서 생략되어 있는 부분 imageManager는 PHCachingImageManager 클래스를 통해서 사용할 수 있습니다.

카메라 롤의 asset 오브젝트, 이미지의 사이즈, 이미지 비율, 이미지 퀄리티나 버젼 (imageRequestOption) 등을 파라미터로 받아서 이미지를 요청 할 수 있도록 구성되어 있으며, 마지막 핸들러에서 image를 받아올 수 있습니다. 

let cameraRolls = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumUserLibrary, options: nil)
let cameraRolls = PHAsset.fetchAssets(in: collection, options: fetchOptions)

마지막으로 fetch 함수들을 잘 이해할 수 있어야 원하는 구현 작업에 어려움이 없을 것 같습니다. 처음에 관련해서 상당히 헷갈리더라고요.

 

잘못된 부분이 있다면 꼭 댓글 부탁드립니다!

확인해서 수정하도록 할게요!!

 

끝까지 읽어주셔서 정말 감사합니다 :)

 

[부스트코스] iOS프로그래밍

Photos 프레임워크

https://www.edwith.org/boostcourse-ios/lecture/16867/

 

[LECTURE] 1) Photos 프레임워크 : edwith

Photos 프레임워크 iOS 및 tvOS에서 iCloud 사진 라이브러리를 포함하여 사진 및 비디오에 직접 접근하기 위한 Photos 프레임워크에 대해 알아봅니다. 학습 목표 1... - 부스트코스

www.edwith.org

'Codes Travel > iOS Boost Course #2019' 카테고리의 다른 글

UICollectionView 컬렉션 뷰  (0) 2019.08.22
비동기 프로그래밍  (0) 2019.08.22
Codable?  (0) 2019.08.05
UITableView - DataSource & Delegate  (0) 2019.08.05
세그 (Segue) ?  (0) 2019.08.01