iOS, PhotoKit(사진가져오기)

9781 단어 swiftiOSiOS

🧐 사진(Photos)에서 사진들을 가져오는 것을 단계별로 한번 알아보겠습니다!

Step 1

Info.plist 설정해주세요!

Step 2

Photos를 import하고 PHAsset를 받을 프로퍼티와 추가해주세요.

🍁 PHAsset

사진 라이브러리에 있는 image, video, or Live Photo에 대한 메타데이터입니다.

🍁 PHFetchResult

fetch 메소드를 통해 가져오기 위한 asset 컬렉션입니다.

🍁 ViewController.swift

import Photos
class ViewController: UIViewController {
    var photos: PHFetchResult<PHAsset>?
    ...
}
Step 3

이제 asset들을 가져올 차례입니다. 저 같은 경우는 접근 권한이 허용할 경우 가져와 collection view를 reload하기 위해 accessPhotos() 메소드를 생성했습니다.

🍁 fetchAssets(in assetCollection: options:)

asset들을 가져오는 메소드입니다. 리턴 값은 PHFetchResult 입니다.

🍁 ViewController.swift


class ViewController: UIViewController {
  
    ...
  
    func accessPhotos() {
        PHPhotoLibrary.requestAuthorization { [weak self] status in
            if status == .authorized {
                self?.photos = PHAsset.fetchAssets(with: nil)
                DispatchQueue.main.async {
                    self?.collectionView.reloadData()
                }
            }
        }
    }
}
Step 4

이미지를 업데이트 시켜줘야할 차례입니다. PHAsset는 그져 데이터이므로, 데이터를 가지고 PHImageManager를 사용하여 이미지를 요청해야합니다. PHImageManager 프로퍼티를 생성하고 cellForItemAt에서 사용합시다.

🍁 PHImageManager

미리보기 썸네일 및 asset 데이터 검색 또는 생성을 용이하게 하는 개체입니다.

🍁 ViewController.swift

class ViewController: UIViewController { 
    ...
  
    let imageManager = PHImageManager()
  
    ...
}
extension ViewController: UICollectionViewDataSource {
    
    ...
  
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as? Cell else {
            return UICollectionViewCell()
        }
        
        let asset = photos?[indexPath.item]
        cell.representedAssetIdentifier = asset?.localIdentifier
        imageManager.requestImage(for: asset!, targetSize: imageSize, contentMode: .default, options: nil) { image, _ in
            if cell.representedAssetIdentifier == asset?.localIdentifier {
                cell.image.image = image
            }
        }
        return cell
    }
}

🧐(아래 참고내용을 통해 더 자세한 정보를 확인할 수 있습니다!)
Apple Developer Documentation

좋은 웹페이지 즐겨찾기