본문으로 바로가기

PhotoKit은 CRUD가 가능함

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

 

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

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

jmin-developer.tistory.com

여기서 R에 대한부분을 알아봤고 오늘은 CUD에 대해서 알아보고 사진앱의 데이터가 변경됐을시 우리가 만들 앱에 실시간으로 반영해주는 방법을 알아볼거임

 

일단 PHAsset, PHAssetCollection, PHCollectionListimmutable 객체임

그래서 이 객체들의 값을 변경하지 못함

 

PHPhotoLibrary

사용자의 사진보관함에 엑세스 요청 및 변경을 관리하는 객체임

다음에 예제에서 알아볼건데 사진앱에 접근여부를 확인하는것도 얘를통해서 할거임

얘를 통해서 사진앱을 변경하기 위해선 싱글톤으로 접근해야함

 

PHPhotoLibrary.shared.performChanges: 변경 요청을 비동기적으로 함

PHPhotoLibrary.shared.performChangesAndWait: 변경 요청을 동기적으로 함 

 

ChangeRequest

변경하고자 하는 객체의 ChangeRequest를 생성해야함

 

PHAssetChangeRequest: asset 변경할거임

PHAssetCollectionChangeRequest: collection 변경할거임

PHCollectionListChangeRequest: list 변경할거임

 

Delete

ChangeRequest객체의 타입메서드인 deleteAssets을 호출해서 실행함

여기서 주의할점은 deleteAssets의 파라미터에 PHAsset을 바로 넘겨주는게 아니라

PHAsset의 배열을 NSArray로 바꿔줘야함

왜그런지는 모르겠음ㅋ

 

Create

이것역시 ChangeRequest객체의 타입메서드인 creationRequestForAsset을 호출해주면 됨

파라미터로는 UIImage를 받으며 이 메서드를 통해서 사진을 저장할시 메타데이터는 저장이 안된다고 함

만약 메타데이터를 저장하고 싶다면 creationRequestForAssetFromImage 이 메서드를 사용하면 된다고 함ㅇㅇ

 

Update

얘는 ChangeRequest의 객체를 만들어줘야함

ChangeRequest의 생성자 파라미터에 바꾸고자 하는 PHAsset 넣어줘서 생성한 후

그 인스턴스의 속성을 변경하면 됨

 

isFavorite: favorite 사진

isHidden: 사진숨기기

creationDate: 사진날짜

location: 사진 위치

사진앱 변경사항 실시간 반영

사진앱에서 사진 몇개를 삭제했음

그럼 그게 우리가 만든 앱에서도 바로 반영되는게 엘레강스 하지 않겠음?

 

PHPhotoLibraryChangeObserver

얘는 프로토콜이고 필수구현 메서드가 하나 있는데 photoLibraryDidChange 라는 얘임

딱 이름만 봐도 사진앱이 변경되면 호출될것같지 않음?

 

이 메서드에는 changeInstance라는 파라미터가 있는데 이걸로 현재 앱에서 가지고 있는 fetchResult와 변경된점을 비교해서 변경된 내용이 적용된 fetchResult를 사용할수 있음

그리고 이것은 프로토콜이기때문에 PHPhotoLibrary.shared().register(self) 을 해줘야 사용할수 있음

 

지난번이랑 오늘까지 해서 PhotoKit으로 CRUD하는법을 다 알아봤음

그럼 다음엔 한번 실제로 사용해보겠음

 

-끝!-