[TIL] 2022-04-29

선주·2022년 4월 29일
0

TIL

목록 보기
12/13

📌 Photos Framework

iOS/macOS의 사진 애플리케이션의 라이브러리를 관리할 수 있는 클래스를 제공

Asset

  • PHAsset
  • 사진, 비디오, 라이브포토 등 각각의 미디어 개체

Asset Collection

  • PHAssetCollection

  • Asset을 모아둠

  • Asset Collection을 가져올 때는 fetchAssetCollections(with:subtype:options:) 메소드를 사용하는데, 이 메소드는 컬렉션의 메타데이터만 가져온다.
    PHFetchOptions를 이용해 fetch해올 때의 옵션을 지정할 수도 있다.

  • 이 메타데이터를 가지고 실질적인 미디어 데이터를 얻으려면 요청 과정이 필요하다. PHCachingImageManager에게 requestImage(for:targetSize:contentMode:options:requestHandler) 메소드로 요청을 할 수 있다.
    (이 매니저는 이미지를 자동으로 캐싱하기 때문에, 추후에 똑같은 이미지를 똑같은 크기로 가져오려고 할 때 캐싱된 이미지를 불러와 부담을 덜어준다.)

  • 그럼 왜 처음부터 미디어데이터를 불러오지 않고 이렇게 번거로운 과정을 거치는 걸까?
    → 한 번에 컬렉션의 모든 미디어데이터를 가져오면 메모리가 버티지 못할 수 있기 때문에 먼저 메타데이터만 가져오고, 미디어데이터는 그 후에 원하는 크기로 용도에 맞게 가져오는 것!


Collection List

  • PHCollectionList
  • Asset Collection을 모아둠

단순히 사진을 가져오기만 하거나, 사진 라이브러리를 사용자에게 보여주기만 하는 서비스라면 Photos 프레임워크보단 PhotosUI 프레임워크를 사용하는 것이 간단할 수 있음!


📌 Collection View

테이블뷰와 비슷하지만 그리드 레이아웃을 구현할 수 있으며 가로 방향으로도 스크롤이 가능하다. 아이템의 크기를 각각 다르게 설정할 수도 있어 유연한 구성이 가능하다.

Class

  • UICollectionView
  • UICollectionViewCell
  • UICollectionViewLayout
    • UICollectionViewFlowLayout

UICollectionViewLayout 클래스는 컬렉션뷰 안의 아이템이 어떤 위치에 어느 크기로 존재해야 하는지를 결정하는 역할을 한다. UICollectionViewFlowLayout 클래스는 UICollectionViewLayout을 상속받고, 기본적으로 Grid 레이아웃으로 보여주기 위해 만들어졌으며, Grid가 아닌 다른 레이아웃 형태를 원한다면 커스텀하여 사용하면 된다.


Protocol

  • UICollectionViewDataSource
  • UICollectionViewDelegate
  • UICollectionViewDelegateFlowLayout

UICollectionViewFlowLayout은 UICollectionViewDelegateFlowLayout 프로토콜과 함께 동작하기 때문에 반드시 채택해주어야 한다. 이 딜리게이트를 채택하면 각 아이템의 사이즈를 다르게 적용하는 등의 동작이 가능하다.


UICollectionViewDataSource 필수 메서드

// 섹션에 표시할 셀 갯수를 묻는 메서드
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int

// 콜렉션 뷰의 특정 인덱스에서 표시할 셀을 요청하는 메서드
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell

http://yoonbumtae.com/?p=3418 요거 읽으면서 만들어보깅


참고
Velog | Martin Kim

profile
기록하는 개발자 👀

0개의 댓글

Powered by GraphCDN, the GraphQL CDN