-
[ios - Swift] PHCachingImageManager 사용하기ios 2020. 12. 14. 09:43
이번 글에서는 포토 라이브러리를 만들어볼 예정입니다.
포토 라이브러리에 접근하는 방법은 PHImageManager, PHCachingImageManager 두 가지이며 사용방법은 동일합니다.
PHCachingImageManager를 사용하는 것이 이미지를 빨리 가져올 수 있으므로 PHCachingImageManager을 사용하도록 하겠습니다.
let imageManager:PHCachingImageManager = PHCachingImageManager() var imageFetch: PHFetchResult<PHAsset>?
공유 이미지 관리자 개체와 사진에 대한 메타데이터를 관리할 수 있는 리스트를 선언해 주도록 합니다.
PHAsset 에는 사진이 아닌 메타데이터만을 가지고 있습니다.
func loadPHCachingImage() { let fetchOptions = PHFetchOptions() fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] self.imageFetch = PHAsset.fetchAssets(with: .image, options: fetchOptions) }
viewDidLoad에서 호출할 함수이며 공유 이미지를 파일 생성 날짜순 정렬해 검색하는 부분입니다.
이제 collectionView를 이용해 이미지를 요청하도록 하겠습니다.
extension PhotoViewController: UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return imageFetch?.count ?? 0 } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PhotoCollectionViewCell", for: indexPath) as! PhotoCollectionViewCell let width = (collectionView.frame.width - 3) / 3 let size = CGSize(width: width, height: width) if let asset:PHAsset = self.imageFetch?.object(at: indexPath.row) { self.imageManager.requestImage(for: asset, targetSize: size, contentMode: .aspectFill, options: nil) { (image, error) in cell.imageView.image = image } } return cell } }
공유 이미지 관리자 개체에 메타데이터에 해당하는 이미지를 요청하도록 합니다.
이때 옵션은 nil 이라고 했지만 PHImageRequestOption 을 사용하여 아래와 같은 옵션을 추가로 사용할 수 있습니다.
isSynchronous = true : 이미지 요청을 동기로 처리
requsetOptions.deliveryMode = .fastFormat : 이미지 품질
requsetOptions.resizeMode = .fast : none:조정안함, fast:기존과 비슷하거나 큼, exact:일치하도록
'ios' 카테고리의 다른 글
[ios - Swift] MapView 사용하기 (MKMapView 1 / 2) (1) 2020.12.22 [ios - Swift] Alamofire Example (0) 2020.12.21 [ios - Swift] UIImageView Gesture 동작 안하는 문제 (0) 2020.12.08 [ios - Swift] Foreground Push 알림 사용 (UNUserNotificationCenter 2/2) (0) 2020.12.06 [ios - Swift] Push 알림 사용하기 (UNUserNotificationCenter 1/2) (0) 2020.12.06