틀린내용이 있을수 있습니다
혹시 틀린내용이 있다면 알려주시면 감사하겠습니다:)
오늘은 포토킷에 대해서 알아볼거임
글 올리는 순서가 뒤죽박죽인것같은데 그냥 올리고싶은거 올렬려함
지금 정리 안하면 까먹을것같기도 하고
PhotoKit이란?
포토킷이란 iOS, macOS, tvOS에서 사진앱에서 관리하는 사진 및 비디오에 액세스하게 해주는 프레임워크임
포토킷을 사용하면 사진이나 비디오를 가져와서 표시 및 재생을 하고 편집이나 앨범같은 컬렉션도 관리할 수 있음
PHAsset
사진앱에 있는 이미지, 비디오, LivePhoto 하나를 나타냄
PHAsset은 사진의 메타데이터를 나타내며 이 객체 자체가 사진이 아님
PHAssetCollection
사진앱에 있는 앨범임
PHCollectionList
사진앱에 있는 폴더임
난 사진앱에서 폴더를 만들수 있다는걸 처음알았음
이런식으로 사진앱의 앨범탭에서 만들수 있음
폴더에는 사진자체를 보관할수 없고 앨범만 만들수 있음
대충 이런 구조로 돼있다고 보면 됨ㅇㅇ
FetchMethod
객체를 불러오기 위해선 불러올려는 객체의 타입메서드를 호출하면 됨
예를들어 PHAsset의 객체를 불러올려면 PHAsset.fetchAsset,
앨범을 불러올려면 PHAssetCollection.fetchAssetCollection
이렇게 하면 된다 이거임
리턴값으론 PHFetchResult를 뱉어줌
PHFetchResult
fetch method를 통해 반환된 asset이나 컬렉션의 리스트임
사진을 불러오면 한장씩 불러오는 경우도 있으나 여러장을 한번에 불러오는 경우도 있을거아님
컬렉션뷰의 셀에 뿌려준다든가
얘는 제네릭타입으로 제네릭 타입에 맞는 객체만 결과로 받아올수 있음
예를들면 PHFetchResult<PHAsset> 타입에는 PHAsset만 받을수 있고 PHAssetCollection같은건 못받겠지
근데 이 자체가 객체의 배열은 아니고 클래스 안에 객체의 배열이 있는 형식이라 하나하나 꺼내써야함
다행히 얘는 서브스크립트가 구현돼있어서 인덱스로 객체 하나에 접근이 가능함
또한 배열에 구현된 메서 랑 비슷한 firstObject나 contains, count같은 이름만 들어도 무슨 역할을 할지 알것같은 메서드들이 구현돼있음
PHFetchOptions
fetch 할때 결과의 정렬이나 필터링등 옵션을 설정할수 있음
PHImageManager
얘가 이제 메타정보인 PHAsset을 가지고 실제 사진을 가져오는얘임
싱글톤으로 구현돼있는 얘라 PHImageManager.default.requestImage 이런식으로 접근하면 됨
얘는 기본적으로 비동기로 실행함
그리고 혹시 이미지 용량이 커서 이미지 받아오는 시간이 좀 걸린다 하면 저사양 이미지를 먼저 주고 다음에 받아온 이미지를 줄수도 있다고 함
requestImage 메서드의 파라미터들인데 하나씩 대충 살펴보겠음
asset: 사진을 뽑아올 메타데이터를 가지고있는 PHAsset 객체임
targetSize: 얘가 좀 골때리는데 받아올 이미지의 사이즈임
size가 너무 크면 당연히 받아오는 시간이 좀 걸림
한장만 받아온다면 뭐 크게 문제 없겠지만 콜렉션뷰에 뿌려줄때처럼 한번에 많은 양의 이미지를 받아올경우에는 size를 좀 작게 하는걸 추천함. 물론 그렇다고 너무 실제 표시할 사이즈보다 더 작게하면 화질이 안좋으니까 조심해야함
contentMode: 이미지의 비율? 같은거임 AspectFill같은거 다들 알거라 믿겠음 그걸 여따가 설정해주는거임
targetSize랑 실제 이미지랑 다를때 어쩔건지 설정해주는거임ㅇㅇ
options: 밑에서 살펴볼거임
resultHandler: 받아온 이미지를 받는 탈출클로저임
위에서 말했다시피 이미지 용량이 큰경우 저사양 이미지랑 요청한 이미지랑 해서 두번 실행될수 있다함
PHImageRequestOptions
이미지를 받아올때 옵션임
이것도 하나하나 살펴보겟음
내가 써본것으로만ㅋ
isSynchronous: 이미지 요청을 동기적으로 처리할지 여부임
기본값은 false로 비동기 요청임. 만약 동기적으로 처리하게 되면 resultHandler가 두번호출되는 일은 없다함
deliveryMode: 이미지 품질임
.fastFormat: 품질은 떨어지나 속도가 빠른 모드임
.highQualityFormat: 속도가 얼마나 걸리든 최고품질을 주는 모드임
.opportunistic: 상황봐서 위 두게를 적절히 제공하는 모드임
resizeMode: 이미지의 크기를 조정하는 옵션임
.none: 리사이즈 안함
.fast: targetSize와 비슷하거나 살짝 크게 효율적으로 조정함
.exact: targetSize와 정확히 일치시킴
이렇게 오늘은 이미지를 받아오기 위한걸 알아봤고 다음엔 이미지 메타정보를 수정하는 법과 사진앱에서 사진을 수정했을때 바로 적용시키는 법을 알아보겠음
참고
https://zeddios.tistory.com/614?category=682195
iOS ) PhotoKit (1)
안녕하세요 :) Zedd입니다. 오늘은 PhotoKit을 공부해보려고 합니다. PhotoKit PhotoKit도....프레임워크라고 할 수 있겠죠? 프레임워크라고 언급이 안되어있긴 한데........ Objc에서 프레임워크라고 언급
zeddios.tistory.com
https://developer.apple.com/documentation/photokit/phasset/
Apple Developer Documentation
developer.apple.com
'ios 개발 > iOS' 카테고리의 다른 글
[iOS] PhotoKit (3/3) - Photokit으로 사진가져오기 (0) | 2022.05.21 |
---|---|
[iOS] PhotoKit (2/3) - 사진앱 변경 요청하기 및 변경사항 실시간 동기화 (0) | 2022.05.21 |
[iOS] identifier 쉽게 등록하는법 (0) | 2022.05.19 |
[iOS] 픽셀과 포인트의 차이 (0) | 2022.05.18 |
[iOS] CGPoint, CGSize, CGRect (0) | 2022.05.17 |