PhotoKit은 CRUD가 가능함
https://jmin-developer.tistory.com/46
[iOS] PhotoKit (1/3) - 사진을 받아오기 위해 알아야 하는것
틀린내용이 있을수 있습니다 혹시 틀린내용이 있다면 알려주시면 감사하겠습니다:) 오늘은 포토킷에 대해서 알아볼거임 글 올리는 순서가 뒤죽박죽인것같은데 그냥 올리고싶은거 올렬려함 지
jmin-developer.tistory.com
여기서 R에 대한부분을 알아봤고 오늘은 CUD에 대해서 알아보고 사진앱의 데이터가 변경됐을시 우리가 만들 앱에 실시간으로 반영해주는 방법을 알아볼거임
일단 PHAsset, PHAssetCollection, PHCollectionList는 immutable 객체임
그래서 이 객체들의 값을 변경하지 못함
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하는법을 다 알아봤음
그럼 다음엔 한번 실제로 사용해보겠음
-끝!-
'ios 개발 > iOS' 카테고리의 다른 글
[iOS] frame, bounds의 차이 (1/2) - frame (0) | 2022.05.22 |
---|---|
[iOS] PhotoKit (3/3) - Photokit으로 사진가져오기 (0) | 2022.05.21 |
[iOS] PhotoKit (1/3) - 사진을 받아오기 위해 알아야 하는것 (0) | 2022.05.20 |
[iOS] identifier 쉽게 등록하는법 (0) | 2022.05.19 |
[iOS] 픽셀과 포인트의 차이 (0) | 2022.05.18 |