[WWDC2019] Advances in CollectionView Layout
CollectionView Layout์ ๋ฐ์ ๋ชฉ์ฐจ
CollectionView์ ํ์ฌ ๊ธฐ์ (current state of the art)
(iOS, tvOS, MacOS) ์๋ก์ด ์ ๊ทผ ๋ฐฉ์ (a new approach)
Demo
๊ณ ๊ธ ๊ธฐ๋ฅ (advanced layouts)
1. CollectionView์ ํ์ฌ ๊ธฐ์ (current state of the art)
UICollectionViewFlowLayout
CollectionViewLayout
Layout์ ์ ์ํ๊ธฐ ์ํด ๋ ๊ฐ์ง ์ญํ ์ ๊ฐ์ง ํด๋์ค๋ก ์ถ์ํ๋์ด์๋ค.
rendering์ ํ๋ class
collectionView Layout์ด ์ด๋๋ก ๊ฐ๋์ง?์ ๋ํด ์ฑ ์์ ์ง๋ class
CollectionView Layout์ ์ถ์ํ๋์ด์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ ค๋ฉด ํญ์ Subclassing์ ํด์ผํ๋ค.
์ด๊ฒ์ Concrete type์ผ๋ก ์ ์ํ ๊ฒ์ด iOS 6์์ ๋ฐํํ๋ CollectionView Flow Layout์ด๋ค.
CollectionViewFlowLayout
line based layout system์ด์๊ธฐ ๋๋ฌธ์, iOS6์ ์ฌ์ฉํ๋ ํ๊ฒฝ์์ ๋งค์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
(2018 WWDC ์์ ์ฐธ๊ณ ) ๋จ์ํ Line๋ค์ ๋ฐฐ์นํ๊ณ , ์ถ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐฐ์นํด์ Layout์ ๊ตฌ์ฑํ ์ ์๋ค.
๋งค์ฐ ๊ฐ๋จํ๊ณ , ์ถ๋ก ์ด ์ฌ์ฐ๋ฉฐ, ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
ํ์ง๋ง ์์ฆ์ ์ด์ข ํ๋๋ ๊ธฐ๊ธฐ์, ๋ค์ํ custom layout์ด ๋์ค๋ฉด์ UI๊ฐ ๋งค์ฐ ๋ณต์กํด์ก๋ค.
๋ณต์กํด์ง UI๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ์ ์ ์ดํด๋ณด์.
AppStore์ ๋ฉ์ธํ๋ฉด์ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ๋ค์ํ ์ปดํฌ๋ํธ๋ฅผ ๊ณ ๋ฏผํ ๊ฒ์ด๋ค.
๋ค์ํ ๋ชจ์์ Cell์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์, CollectionView๋ฅผ ์ ํํ๋ค๊ณ ๊ฐ์ ํ์.
์ด๋, โFlowโ๋ฅผ ํํํ ์ ์์์ง ๊ณ ๋ฏผํ๊ธฐ ์์ํ์๋ง์ CollectionView ์ฌ์ฉ์ ํฌ๊ธฐํ๊ฒ ๋๋ค. (์ด์ ๋ ๋ชฐ๊น)
Custom Layout์ ์ค๊ณํ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์
Boilerplate code
Performance considerations
Supplementary and decoration view challenges
CollectionView์์ ๊ด๋ฆฌํ ์ ์๋ View, DecorationView๋ CustomLayout์์ ๊น๋ค๋กญ๊ฒ ์์ฉํ๋ค.
Self-sizing challenges
โ ์ด ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด Flow์ ๋์ผํ Concrete class์ธ ์๋ก์ด ํ๋ซํผ์ ๋์ ํ์ผ๋ฉฐ, ์ด๊ฒ์ด ๋ฐ๋ก Compositional Layout์ด๋ค.
2. ์๋ก์ด ์ ๊ทผ ๋ฐฉ์ (a new approach)
Compositional Layout์ ๊ฐ๋
Compositional Layout์ ์ค์ฌ ๊ฐ๋ 3๊ฐ์ง
Composable
๊ฐ๋จํ ๊ฒ์ ์ด์ฉํด์ ๋ณต์กํ ๊ฒ์ ๋ง๋ ๋ค.
Flexible
์ ์ฐํ๊ฒ ์ค๊ณ๋์ด, ์ด๋ค ๋ ์ด์์์ด๋ ์์ฑํ ์ ์๋ค.
Fast
์์ฒด ์ต์ ํ๋ฅผ ์ํํ์ฌ ๋น ๋ฅด๋ค.
Compositional Layout์ Layout์ ์ค๋ช ํ๊ฑฐ๋, ์ ์ํ๋ ์ ์ธํ API์ด๋ค.
Compositional Layout์ ํ์ฉ
Composing small layout groups together
์์ ๋ ์ด์์์ ๋ง๋ค๊ณ , ์ด๋ค์ ์กฐํฉํด์ ๋ ํฐ ๋ ์ด์์์ ๊ตฌ์ฑํ๋ค.
Layout groups are line-based
FlowLayout์ ์ฅ์ ์ ์ด์ด๊ฐ๊ธฐ ์ํด line based์ ๋ฐ๋ผ ๋ ์ด์์์ ๊ทธ๋ฆด ์ ์๋ค. (๊ต์ฅํ ๋ง์ UI)
์์ ๋ ์ด์์ ๊ทธ๋ฃน์ ํ ์ค๋ก Item์ ๋ฐฐ์นํ ์ ์๋ค.
composition instead of subclassing
Subclassing์ ํ์ง ์์๋ ๋๋ค. (Concrete type)
์ถ๋ก ๊ฐ๋ฅํ ๋ ์ด์์์ผ๋ก ๊ตฌ์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋จ์ํ๋ค.
Compositional Layout Code ๋ฐ ๊ฐ๋
Core Concepts
Type(์ ํ)์ ๋ํด ์์ฐ์ค๋ฌ์ด Flow๊ฐ ์กด์ฌํ๋ค.
5๊ฐ์ง ์ ํ์ด ์กด์ฌํ๋ค. (Item, Group, Section, Layout)
Layout Types
Size
๋ชจ๋ ๊ฒ๋ค์ ๋ช ๋ฐฑํ ์ฌ์ด์ฆ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ฌ์ด์ฆ๋ฅผ ์ฝ๊ฒ ์ถ๋ก ํ ์ ์๋ ๋ฐฉ๋ฒ (๊ฐ Type์ด ์ผ๋ง๋ ํฐ์ง ํ์ธ)
Size = Width + Height dimension
NSCollectionLayoutDimension
์ถ๊ณผ ๋ฌด๊ดํ ๋ฐฉ๋ฒ์ผ๋ก, ํญ๊ณผ ๋์ด, ์ฐจ์์ ๋ํ ์ ๋ณด๋ง์ ์ด์ฉํด์ ์ถ์ ํฌ๊ธฐ๋ฅผ ์ค๋ช ํ๋ค.
์ด๋, ํญ๊ณผ ๋์ด์ ๊ฒฝ์ฐ, NSCollectionLayoutDimension์ด๋ผ๋ ์๋ก์ด ์ ํ์ผ๋ก ์ ์ํ๋ค.
NSCollectionLayoutDimension์ 4๊ฐ์ง ์ ํ
ํน์ Item์ width = Container ํญ์ 50%๋ฅผ ์ฐจ์งํ๋ค.
Item์ Height = Container ํญ์ 30% ์ฐจ์ง
ํน์ ์ข ํก๋น๋ฅผ ๊ฐ๋๋ก ์ ์ (Container์ 25%์ฉ aspect ratio)
์ ํํ ์น์๋ฅผ ๊ฐ๋๋ก ์ ์ (point based value)
Item
๊ธฐ์กด์ Cell์ ๊ฐ๋ ๊ณผ ๋์ผ
Group
Section (
NScollectionLayoutSection
)CollectionView์ ๋จ๋ฉด์ ๊ธฐ์ค์ผ๋ก ํ Layou์ ์ ์
Section์ ๋ช ๊ฐ์ ํญ๋ชฉ์ด ์๋์ง์ ๋ํด
DataSource
์ ์ง์ ๋งคํ๋๋ ๊ฐ์ฒดInitializer๊ฐ Group์ ํ์ฉํ๋ค.
Layout
์ต์์ Layout class
iOS, tvOS์ ๊ฒฝ์ฐ, UICollectionViewCompositionalLayout ์ฌ์ฉ
MacOS์ ๊ฒฝ์ฐ, NSViewCompositionalLayout ์ฌ์ฉ
ํ๋ซํผ๊ณผ ์๊ด ์์ด, ๋ชจ๋ ์ ์๊ฐ ๋์ผํ๋ค.
Last updated