본문으로 바로가기

위 글을 먼저 읽고오길 바람

https://jmin-developer.tistory.com/46

 

[iOS] PhotoKit (1/3) - 사진을 받아오기 위해 알아야 하는것

틀린내용이 있을수 있습니다 혹시 틀린내용이 있다면 알려주시면 감사하겠습니다:) 오늘은 포토킷에 대해서 알아볼거임 글 올리는 순서가 뒤죽박죽인것같은데 그냥 올리고싶은거 올렬려함 지

jmin-developer.tistory.com

https://jmin-developer.tistory.com/48

 

[iOS] PhotoKit (2/3) - 사진앱 변경 요청하기 및 변경사항 실시간 동기화

PhotoKit은 CRUD가 가능함 https://jmin-developer.tistory.com/46 [iOS] PhotoKit (1/3) - 사진을 받아오기 위해 알아야 하는것 틀린내용이 있을수 있습니다 혹시 틀린내용이 있다면 알려주시면 감사하겠습니다:)..

jmin-developer.tistory.com

 

블로그에서는 사진을 가져와서 컬렉션뷰에 뿌려주는걸 한번 해보겠음

참고로 깃허브에는 사진삭제, 추가, 업데이트, 실시간 반영(?) 기능도 구현해볼테니 한번 봐도 좋고

일단 권한요청부터 함

PhotoKit을 쓸려면 import Photos 해줘야함

 

권한요청

 

let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
        
switch photoAuthorizationStatus {
case .authorized:
   print("인증됨")
case .notDetermined:
    PHPhotoLibrary.requestAuthorization { [weak self] status in
        switch status {
        case .authorized:
            print("인증됨")   
        default:
            break
        }
    }
default:
    return
}

권한허용상태를 확인한다음 권한이 확인이 안될경우 권한요청을 하는 코드임

 

var assets: PHFetchResult<PHAsset>?

일단 가져온 사진들을 담을 배열을 하나 만듬

사진이든 앨범이든 fetch를 하게되면 PHFetchResult 타입으로 나오게 됨

이게 제네릭이라 저 제네릭 타입에 맞는 객체를 fetch 해야함

그니까 저기에는 PHAssetCollection같은걸 fetch하면 안됨

private func fetchAllAssets() {
	let fetchOptions = PHFetchOptions()
    fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
    assets = PHAsset.fetchAssets(with: fetchOptions)
}

fetchOptions를 만들어서 가져온 사진들을 날짜순으로 정렬함

그리고 PHAsset의 fetchAssets 메서드를 통해서 전체사진을 가져옴

여기서 PHAsset은 사진이 아닌 메타정보를 가져오는거임

guard let assets = assets else { return UICollectionViewCell() }
PHAsset 하나 가져오기
let asset = assets[indexPath.item]
// targetSize
targetSize = CGSize(width: 360, height: 360)
// requestOptions
let requestOptions = PHImageRequestOptions()
// 이미지 품질
requestOptions.deliveryMode = .highQualityFormat
// 이미지 리사이즈
requestOptions.resizeMode = .none
        
PHImageManager.default().requestImage(for: asset, targetSize: targetSize,
									  contentMode: .aspectFill,
                                      options: requestOptions) { image, _ in
    cell.ImageView.image = image
}

이렇게 PHAsset객체 하나를 가져와서 requestImage로 이미지를 받아온다음에 셀에 뿌려주면 끝임

 

-끝!-

 

소스코드 보러가기 - 사진삭제, 추가, 업데이트, 실시간반영 함수 구현

https://github.com/jmindeveloper/PhotoKitTutorial

 

GitHub - jmindeveloper/PhotoKitTutorial: https://jmin-developer.tistory.com/46

https://jmin-developer.tistory.com/46. Contribute to jmindeveloper/PhotoKitTutorial development by creating an account on GitHub.

github.com