Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

potato's iOS Story/๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋งŒ๋‚œ ์นœ๊ตฌ๋“ค

[UIKit] UICollectionView ๋‚ด๋ถ€์— ๋“ค์–ด๊ฐ€๋Š” cell์˜ ๊ทœ์น™(?)์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ž ๐Ÿฅ” 2022. 10. 27. 03:46
๋ฐ˜์‘ํ˜•

๐Ÿ’ฌ ์‹œ์ž‘ํ•˜๋ฉฐ TMI ์„ค๋ช…

์ง€๊ธˆ์€ ์• ํ”Œ ๋””๋ฒจ๋กœํผ ์•„์นด๋ฐ๋ฏธ์—์„œ ๋งจ ๋งˆ์ง€๋ง‰ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค. ๋งˆ์ง€๋ง‰์ธ ๋งŒํผ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„์ด 3๋‹ฌ์ •๋„๋กœ ์ข€ ๊ธด ํŽธ์ด๊ณ , ๊ทธ ๊ธฐ๊ฐ„๋™์•ˆ ํŒ€์›๋“ค๊ณผ ๊ธฐํš + ๋””์ž์ธ + ๊ฐœ๋ฐœ ๊นŒ์ง€ ๋ชจ๋‘ ์™„๋ฃŒํ•ด์•ผํ•œ๋‹ค.

ํƒ€ ๋ถ€ํŠธ์บ ํ”„์™€ ์ฐจ์ด์ ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” ์ ์€, ์• ํ”Œ ๋””๋ฒจ๋กœํผ ์•„์นด๋ฐ๋ฏธ์— ์žˆ์œผ๋ฉด '๊ธฐํš๋ ฅ'์ด ์˜ฌ๋ผ๊ฐ€๊ณ , ์“ธ๋ชจ์žˆ๋Š” ์•ฑ ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ƒ๊ฐํ•˜๊ฒŒ ๋œ๋‹ค. ์ฃผ๋ณ€ ํŒ€๋“ค์˜ ์•„์ด๋””์–ด๋งŒ ๋ด๋„, ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌํŒ€์˜ ์•„์ด๋””์–ด๋งŒ ๋ด๋„ ๊ทธ๋ƒฅ ํ•™์ƒ ์ˆ˜์ค€์˜ ํ”„๋กœ์ ํŠธ๋Š” ํ•˜๊ณ ์‹ถ์ง€ ์•Š๋‹ค๋Š” ์˜์ง€๊ฐ€ ๊ฐ•ํ•˜๊ณ , ์‹ค์ œ๋กœ ๊ณ ๊ฐ ์œ ์น˜์— ์„ฑ๊ณตํ•  ๊ฒƒ ๊ฐ™์€ ์•ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ํž˜์„ ์Ÿ๋Š”๋‹ค. ๋ชจ๋‘๊ฐ€ ์•„์ฃผ ๋นจ๊ฐ„ ์—ด์ •์‚ฌ๊ณผ์ด๋‹ค ๐ŸŽ

์šฐ๋ฆฌ ํŒ€์€, ์šฐ์„  'EDUTECH'๋ฅผ ๋Œ€์ฃผ์ œ๋กœ ์‚ผ๊ณ , narrow down ํ•˜๋ฉด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค. 


๐Ÿค” ๋ฌด์—‡์„ ๋งŒ๋“ค์—ˆ๋‚˜์š”

1๏ธโƒฃ UICollectionView

๋‚ด๊ฐ€ ๋งก์€ ๋ทฐ๋Š” ๊ฐ€์žฅ ๋ฉ”์ธํ™”๋ฉด์— '์ฝœ๋ ‰์…˜๋ทฐ'๊ฐ€ ํฌํ•จ๋œ ๋ทฐ์ด๋‹ค. ์ผ๋‹จ ๋””์ž์ธ์ด ์™„์ „ํžˆ ๋‚˜์˜ค์ง€ ์•Š์€ ์ƒํƒœ์ด๋ฏ€๋กœ, ์™€์ด์–ด ํ”„๋ ˆ์ž„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. UICollectionView๋Š” Cell๋„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์•ผํ•˜๊ณ , Datasource ์™€ Delegate๋ฅผ ๋”ฐ๋กœ ์ •์˜ํ•ด์„œ ๊พธ๋ฉฐ์ฃผ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๋ณด์ž๊ฐ€ ์ ‘๊ทผํ•˜๊ธฐ๋Š” ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ทฐ๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ™•์žฅ์„ฑ๋„ ์–ด๋งˆ๋ฌด์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์—,,,, CollectionView๋งŒ ๊ต‰์žฅํžˆ ์ž˜ ๋‹ค๋ค„๋„ ์ž์‹ ๊ฐ์ด ํญํ’์ƒ์Šนํ•  ๊ฒƒ ๊ฐ™๋‹ค.

๋‚ด๊ฐ€ ๋งก์€ ์ด์Šˆ์ด๋‹ค.

https://github.com/DeveloperAcademy-POSTECH/MacC-Team-EarthValley80/issues/9

 

[FEAT] ์š”๋ชจ์กฐ๋ชจ ๋‰ด์Šค ํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ ์žก๊ธฐ · Issue #9 · DeveloperAcademy-POSTECH/MacC-Team-EarthValley80

๐Ÿ”ต ์š”๋ชจ์กฐ๋ชจ ๋‰ด์Šค ํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ์„ ์žก์Šต๋‹ˆ๋‹ค. ์•„์ง ์‚ฌ์ด๋“œ๋ฐ”์— ๋Œ€ํ•œ ๋””์ž์ธ์ด ํ™•์ •๋˜์ง€ ์•Š์•˜๊ณ  ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ด๋“œ๋ฐ”์— ๋Œ€ํ•ด์„œ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๋ ˆ์ด์•„์›ƒ์„ ์žก์Šต๋‹ˆ๋‹ค. ๐Ÿ”ต ์™„

github.com

๋‚˜๋Š” ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์˜ ์ฝœ๋ ‰์…˜๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.

 

2๏ธโƒฃ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ด์—ˆ๋‚˜์š”

  • ๋””์ž์ด๋„ˆ์˜ ์˜๋„๋ฅผ ํ—ค์น˜์ง€ ์•Š๊ฒŒ ๊ฐœ๋ฐœํ•  ๊ฒƒ

๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๊ณ  ๊ฐœ๋ฐœํ•œ ๋ถ€๋ถ„์ด๋‹ค. ๋ฌผ๋ก , ๊ฐœ๋ฐœ์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๋””์ž์ด๋„ˆ์™€ ์ถฉ๋ถ„ํžˆ ์ƒ์˜ํ•˜๊ณ  ๋””์ž์ธ์„ ์ง„ํ–‰ํ–ˆ๊ณ , ๋‚ด๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋„์ „ํ•  ์ˆ˜ ์žˆ์„๋งŒํ•œ ๋ฒ”์œ„์˜ ์š”์†Œ๋“ค๋งŒ ๋ฐ›์•„์™”๋‹ค.

ํ•ด๋‹น ๋ทฐ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€ ์„ธ ๊ฐ€์ง€์ด๋‹ค.

  1. ์–‘์ชฝ ์ •๋ ฌ์„ ๊ผญ! ๋งž์ถœ๊ฒƒ
  2. ํ•œ ์ค„์— ํ•œ์นธ์ž๋ฆฌ ๋„ค๋ชจ๋Š” 5๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ , ๋“ค์–ด๊ฐˆ label์ด ๊ธด ๊ฒฝ์šฐ ๋‘์นธ์„ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ
  3. ๋˜‘๊ฐ™์€ ๋ฐฐ์—ด์˜ row๊ฐ€ ๋ฐ˜๋ณต๋˜์ง€ ์•Š์„ ๊ฒƒ

์ด ์„ธ๊ฐ€์ง€๋ฅผ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š”, server์—์„œ ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์ •๋ ฌํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

3๏ธโƒฃ ๊ทธ๋ž˜์„œ ๋จธ๋ฆฌ๊ฐ€ ๊นจ์ง€๋„๋ก ๋กœ์ง์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ–‡์–ด์š” ; ๐Ÿคฏ๐Ÿคฏ๐Ÿ”ฅ

์„œ๋ฒ„์—์„œ ๋“ค์–ด์˜ค๋Š” label์˜ ๊ธธ์ด๋Š” ๋ชจ๋‘ ๋‹ค๋ฅผ ๊ฒƒ์ด๊ณ , label์˜ ๊ฐฏ์ˆ˜๋„ ๋งค๋ฒˆ ๋‹ค๋ฅผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ ์ €๊ฒƒ๊ณผ ๊ฐ™์€ ๋ทฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ๋…ธ๋ ฅํ•ด์•ผํ–ˆ๋‹ค.

์ตœ์ข… ๊ฐฏ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ 5๊ฐœ์”ฉ count๋ฅผ ํ•ด๋ณผ๊นŒ?

๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ฒ˜์Œ ์ƒ๊ฐํ•œ ๋ฐฉ์‹์ด๋‹ค. label์˜ ๊ธธ์ด๊ฐ€ ๊ธธ๋ฉด ๋‘์นธ์„ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— count์— +2๋ฅผ ํ•ด์ค€๋‹ค. ์•„๋‹Œ๊ฒฝ์šฐ๋Š” +1์„..

var count = 0
var temp = [newsData]()
var newData = [newsData]()

for i in 0..<data.count {
    if count < 5 {
        if data[i].newsTitle.count >= 30, count + 2 <= 5 {
            count += 2
            newData.append(data[i])
        } else if data[i].newsTitle.count >= 30, count + 2 > 5 {
            temp.append(data[i])
        } else if data[i].newsTitle.count < 30 {
            count += 1
            newData.append(data[i])
        }
    }

    if count == 5 {
        count = 0
    }
}

์ด๋Ÿฐ์‹์œผ๋กœ ์งฐ์—ˆ๋‹ค. ์ด๊ฑด ์˜จ์ „ํžˆ,,, "ํ•œ์ค„์— ๋‹ค์„ฏ๊ฐœ ๋‹ค ์ฐผ๋‚˜?"๋งŒ ๊ณ ๋ คํ•œ ์ฝ”๋“œ์˜€๋‹ค. ๊ทธ๋ž˜์„œ ๋งŒ์•ฝ ๊ธด label๋งŒ ์—ฐ์†์ ์œผ๋กœ ๋“ค์–ด์™”์„ ๋•Œ, ๋‚ด๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ์ „ํ˜€ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ–ˆ๊ณ , 5๊ฐ€ ์ฑ„์›Œ์ง€์ง€ ์•Š๋Š๋‹ค๋ฉด, ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ณ  ๋ง์•˜๋‹ค. 

๊ทธ๋ž˜๋„ ์ฒซ๋ฒˆ์งธ ์‹œ๋„ ,, ๋‚˜์˜์ง€ ์•Š์•˜๋‹ค.

 

๋‹ค์‹œ์ƒ๊ฐํ•ด๋ณด๋ฉด, label์ด ๊ธธ์–ด์„œ ๋‘๊ฐœ์˜ ์ž๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์• ๋“ค๋งŒ ์ฒ˜๋ฆฌ๋ฅผํ•ด์ฃผ๋ฉด ๋˜๋Š”๊ฑฐ์˜€๋‹ค. ํ•œ๊ฐœ์งœ๋ฆฌ๋Š” row๋ฅผ ๊นจ์ง€๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š์œผ๋‹ˆ ์ „ํ˜€ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ƒํ™ฉ์ด์—ˆ๊ณ !!!

๊ทธ๋ž˜์„œ 2๊ฐœ์˜ ์นธ์„ ์ฐจ์ง€ํ•˜๋Š” ์• ๋“ค ๋จผ์ € ์ƒ๊ฐํ•ด์ฃผ์—ˆ๋‹ค. 2๊ฐœ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์• ๋“ค์€ ํ•œ row์— ์ตœ๋Œ€ 2๊ฐœ๊นŒ์ง€ ๋“ค์–ด๊ฐ„๋‹ค.
๊ทธ๋ž˜์„œ long ๊ณผ short๋กœ ๊ธธ์ด์— ๋”ฐ๋ผ label์„ ๋‚˜๋ˆ ์ฃผ๊ณ , longCount๋ฅผ 2๋กœ ๋‚˜๋ˆˆ row์— ์ผ๋‹จ 2๊ฐœ์˜ long label, 1๊ฐœ์˜ short label์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

var long = data.filter { $0.newsTitle.count >= 30 }.map { $0 }
var short = data.filter { $0.newsTitle.count < 30}.map { $0 }

var newdata = [newsData]()
var longCount = long.count
var shortCount = short.count

for _ in 0..<longCount/2 {
    if longCount % 2 == 1 {
        newdata.append(long.removeLast())
        newdata.append(short.removeLast())
        newdata.append(short.removeLast())
        newdata.append(short.removeLast())
    }

    for _ in 0..<2 {
        newdata.append(long.removeLast())
    }

    newdata.append(short.removeLast())
}

for i in short {
    newdata.append(i)
}

์™€ ์ž ๊น๋งŒ ์ด๋ ‡๊ฒŒํ•˜๋ฉด,,,, ์•„๋ž˜์ฒ˜๋Ÿผ ๊ต‰์žฅํžˆ UI์ ์œผ๋กœ ์ง€๋ฃจํ•œ ๋ทฐ๊ฐ€ ์™„์„ฑ๋œ๋‹ค. (์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ์บก์ณ๋ฅผ ๋ชปํ•ด์„œ ๋Œ€์ถฉ ๋„ค๋ชจ ๊ทธ๋ฆผ์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.)

์‹ฌ์ง€์–ด 2์นธ์„ ์ฐจ์ง€ํ•˜๋Š” label์ด ๊ฐฏ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๊ฒŒ ๋˜๋ฉด

์ด๋ ‡๊ฒŒ ๋งˆ์ง€๋ง‰ ๋‘์ค„์—์„œ ๋””์ž์ธ ์˜๋„๊ฐ€ ๊นจ์ ธ๋ฒ„๋ฆฌ๊ฒŒ ๋œ๋‹ค. .. ์ด ๋ถ€๋ถ„์œผ ใ„น์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊ฑด๋ฐ??? ๊ทธ๋ฆฌ๊ณ  ์‹ฌ์ง€์–ด row์˜ ๊ทœ์น™์ด ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ ์กฐ์ฐจ ๋œฏ์–ด ๊ณ ์ณ์•ผํ–ˆ๋‹ค.

 

๐Ÿ’ฌ ์ด๊ฑธ๋กœ ์ •๋ง ์˜ค๋žœ ์‹œ๊ฐ„๋™์•ˆ ๊ณ ๋ฏผํ–ˆ๋‹ค.... ๐Ÿ˜ญ ๋จธ๋ฆฌ๊ฐ€ ๊นจ์ ธ๋ฒ„๋ฆฌ๋Š”์ค„

๋ถ„๋ช… ๊ทœ์น™์ด ์ˆจ์–ด์žˆ์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ ,, ์ˆ˜ํ•™์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด์„œ ํ’€๋ฆด ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทผ๋ฐ ๋‚ด ๋จธ๋ฆฌ๊ฐ€ ,,, ์•ˆ๋Œ์•„๊ฐ€,,,

๊ทธ๋ž˜์„œ ์ผ๋‹จ ์ผ์ •ํ•œ ํŒจํ„ด์„ ์ฃผ์–ด์„œ ๋‹ค์–‘ํ•œ row ๊ทœ์น™์„ ๋งŒ๋“ค์–ด์ฃผ๋„๋ก ๋งŒ๋“ค์—ˆ๊ณ , 2์นธ์งœ๋ฆฌ ์ฐจ์ง€ํ•˜๋Š” label์ด ๋งŽ์•„์„œ 1๊ฐœ์งœ๋ฆฌ ๋ทฐ๊ฐ€ ๋” ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•ด์„œ ๋””์ž์ธ์˜๋„๊ฐ€ ํ—ค์ณ์ง€์ง€๋Š” ์•Š๋Š”, ๋ทฐ๋ฅผ ์™„์„ฑํ–ˆ๋‹ค.

private func sortdata(_ data: [newsData]) -> [newsData] {
        var short = data.filter { $0.newsTitle.count < 30 }.map { $0 }
        var long = data.filter { $0.newsTitle.count >= 40 }.map { $0 }
        let longcount = long.count
        var mid = [newsData]()
        var newdata = [newsData]()
        var lastloop = 0

        if long.count / 2 > short.count {
            lastloop = (long.count / 2) - short.count
            print("lastloop \(lastloop)")
        } else if long.count / 2 + 2 <= short.count {
            for _ in 0..<(long.count / 2) / 2 {
                mid.append(short.removeLast())
                mid.append(short.removeLast())
            }
        }

        if lastloop != 0 {
            for _ in 0..<lastloop {
                short.insert(newsData(newsTitle: "-", newsCategory: "-"), at: 0)
            }
        }

        for i in 0..<longcount/2 {
            if long.count == 1 {
                break
            }

            if i % 3 == 0 {
                newdata.append(long.removeLast())
                newdata.append(long.removeLast())
                newdata.append(short.removeLast())
            } else if i % 3 == 1 {
                newdata.append(short.removeLast())
                newdata.append(long.removeLast())
                newdata.append(long.removeLast())
            } else {
                newdata.append(long.removeLast())
                newdata.append(short.removeLast())
                newdata.append(long.removeLast())
            }
        }

        if mid.count != 0 {
            for i in stride(from: Int.random(in: 0...8), through: newdata.count, by: 5) {
                if newdata.count > i {
                    if newdata[i].newsTitle.count >= 40 {
                        newdata.insert(mid.removeLast(), at: i)
                        newdata.insert(mid.removeLast(), at: i+1)
                        newdata.append(newdata[i+2])
                        newdata.remove(at: i+2)
                    }
                }
            }
        }

        for s in short {
            newdata.append(s)
        }
        return newdata
    }

 

ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ์ฐธ๋‹ดํ•˜๋‹ค ์ •๋ง,, ์ฝ”๋“œ๊ฐ€ ์ง„์งœ,,

ํ•˜ํ•˜ํ•˜ํ•˜ํ•˜ํ•˜ํ•˜ใ…ใ…Žํ•˜ํ•˜ 

๋‚ด๊ฐ€ ๊ทธ๋ž˜์„œ ์–ด์ฐŒ์ €์ฐŒ ์ฒ˜๋ฆฌํ•œ ๋ฐฉ๋ฒ•์€, 

๊ฒฐ๊ตญ 2๊ฐœ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” label (long ๋ผ๋ฒจ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ๋‹ค.) ๋งŒ ์˜ˆ์™ธ๋ฅผ ์ž˜ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— ์ง‘์ค‘ํ–ˆ๋‹ค.
๋งŒ์•ฝ long ๋ผ๋ฒจ.count / 2 ํ•œ ์ˆ˜๋ณด๋‹ค short๋ผ๋ฒจ(1๊ฐœ์งœ๋ฆฌ)์ด ๋” ์ ๋‹ค๋ฉด, ์ž„์˜์˜ 1๊ฐœ์งœ๋ฆฌ ๋ผ๋ฒจ์„ ๋งŒ๋“ค์–ด์„œ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ ,,, long long short, short long long, long short long ๊ทœ์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์šฐ์„  ์ •๋ ฌ์„ ์‹œ๋„ํ–ˆ๋‹ค. 

๋งˆ์ง€๋ง‰์œผ๋กœ ๋งค๋ฒˆ ๊ฐ™์€ ๊ทœ์น™์˜ ๋ทฐ๊ฐ€ ๋ฐ˜๋ณต๋˜์ง€๋Š” ์•Š์ง€๋งŒ, 2๊ฐœ์งœ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ๋“ค์–ด๊ฐ€์žˆ์œผ๋ฉด ๋ทฐ๊ฐ€ ๋˜ ์ง€๋ฃจํ•ด์งˆ ์ˆ˜๋„ ์žˆ์–ด์„œ ํ•œ๊ฐœ์งœ๋ฆฌ ๋ทฐ๋ฅผ ์กฐ๊ธˆ ๋” ์ ์ ˆํ•˜๊ฒŒ ์„ž์–ด์ค˜์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ  long๋ผ๋ฒจ.count/2ํ•œ ์ˆ˜๋ณด๋‹ค short๋ผ๋ฒจ์ด ๋งŽ์œผ๋ฉด, ์ง€๋ฃจํ•œ UI๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก, ๋žœ๋ค row index์— long๋ผ๋ฒจ ๋Œ€์‹  short๋ผ๋ฒจ ๋‘๊ฐœ๋ฅผ ๋ฟŒ๋ ค์ค„ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

๐Ÿคฏ ๋‚ด๊ฐ€ ๋งํ•˜๊ณ ๋„,,, ๋ญ”๋ง์ธ์ง€ ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋Š”๋ฐ, ๋ณ€์ˆ˜๋ช… ์ •๋ฆฌ์™€ PR์„ ๋‚ ๋ฆด๋•Œ ๋‹ค์‹œ ํ•œ๋ฒˆ์˜ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. (์ถ”ํ›„ ๋งํฌ๋ฅผ ๊ฑธ์–ด๋‘๊ฒ ๋‹ค.)

์–ด์จ‹๋“  ๊ทธ๋ž˜์„œ ์™„์„ฑํ•œ ๋ทฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค..

 

๋นจ๊ฐ„์ƒ‰๋ทฐ๋Š”, ๋‹ค๋ฅธ ๊ทธ๋ฆผ์ด ๋“ค์–ด๊ฐˆ ์˜ˆ์ •์ด๋‹ค. ๋””์ž์ด๋„ˆ์—๊ฒŒ ์œ„ ์›€์งค์ฒ˜๋Ÿผ 2์นธ์„ ์ฐจ์ง€ํ•˜๋Š” long ๋ผ๋ฒจ์ด ๊ต‰์žฅํžˆ ๋งŽ์€ ๊ฒฝ์šฐ, ์นธ์ด ์ „๋ถ€ ๋น„๊ฒŒ๋˜์–ด ๋ผ์ธ์ด ๊นจ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ ์„ ์„ค๋ช…ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋นจ๊ฐ„์ƒ‰ ๋ถ€๋ถ„์—๋Š” ๊ท€์—ฌ์šด ์ผ๋Ÿฌ์ŠคํŠธ๊ฐ€ ๋“ค์–ด๊ฐˆ ๊ฒƒ ๊ฐ™๋‹ค! ๊ท€์—ฝ๊ฒŸ๋‹น,, ๐Ÿ˜‰


๐Ÿ’ฌ ๋งˆ๋ฌด๋ฆฌ ํšŒ๊ณ 

์–ด์จ‹๋“ ,,, ๋‚ด์ผ๋ถ€ํ„ฐ๋Š” ๊ฐœ๋ฐœ์ผ์ง€๋ฅผ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์จ๋†“๋Š”๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. .. ๋” ๋งŽ์ด ๋Š๋‚€์ ๋„ ์ ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๊ณ ! 
์•„์ง ๋‚˜๋Š” ๋ถ€์กฑํ•œ์ ์ด ๋งŽ๋‹ค. ํŠนํžˆ, collectionview๋Š” ๋งŒ์ ธ๋„ ๋งŒ์ ธ๋„ ์‹ ๊ธฐํ•œ๊ฒŒ ๋งŽ์€๋ฐ, ์–ด์ œ ๋ฉด์ ‘์—์„œ ๋Œ€๋‹ตํ•˜์ง€ ๋ชปํ•œ ์š”์†Œ๋“ค์ด ๋ง‰ ๋– ์˜ค๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๋งž๋‹ค...๋‚ด๊ฐ€ ๋ถ„๋ช… ๊ฑด๋“œ๋ ค๋ณด๊ณ , ๋ถ„๋ช… ๋งŒ์ ธ๋ณธ ์ฝ”๋“œ์ธ๋ฐ, ๋ง‰์ƒ ๋ฌผ์–ด๋ณด๋‹ˆ๊นŒ "์ญ ์ €๊ฒŒ๋ญ์ง€?" ํ•˜๋Š” ์ƒ๊ฐ๊ณผ ํ•จ๊ป˜ "์•„๋‹ˆ์˜ค, ๋‹ค๋ค„๋ณด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฐ”๋ณด๊ฐ™์€ ๋ง์„ ... ๋‚ด๋ฑ‰์—ˆ๋‹ค๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜๋‹ค.

์•„,,, ์ด๊ฒŒ ์ž๋™์™„์„ฑ์œผ๋กœ collectionview๋งŒ๋“ค๋ผ๋ฉด ์ด๋Ÿฐ function์€ ๊ทธ๋ƒฅ ์žˆ์–ด์•ผํ•ด~ ํ•˜๋Š” ์•ˆ์ผํ•œ ์ƒ๊ฐ๋•Œ๋ฌธ์— ๋†“์นœ ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค. ์•ž์œผ๋กœ ๊ณต๋ถ€ํ•  ๋•Œ๋Š”, ๊ทธ๋ƒฅ ๊ตฌํ˜„๋ณด๋‹ค๋Š”, ๋‚ด๊ฐ€ ๋งŒ์ง€๋Š” ์ด๊ฒŒ ๋„๋Œ€์ฒด ์–ด๋–ป๊ฒŒ!! ๊ตฌํ˜„๋˜๋Š”๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์ƒ๊ฐ์„ ํ•ด๋ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

์ถ”๊ฐ€๋กœ ์˜ค๋Š˜ ์Šคํฌ๋Ÿผ์—์„œ ์ง„ํ–‰ํ•œ ๋‚˜์˜ ํšŒ๊ณ ๋„,, ๋ถ™์—ฌ๋‘”๋‹ค.

์˜ค๋Š˜ ์–ด์ฐŒ์ €์ฐŒ ์š”๋ชจ์กฐ๋ชจ ๋‰ด์Šค ๋ฉ”์ธํ™”๋ฉด์˜ collectionview ๋กœ์ง์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐ์„ ์™„๋ฃŒํ•˜๊ณ  ๊ตฌํ˜„์„ ํ•ด๋†จ๋‹ค.
๊ทผ๋ฐ,,, ์ฝ”๋“œ๊ฐ€ ์ง„์งœ ๋”๋Ÿฝ๋‹ค ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ์ดˆ๋ฐ˜์— '์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ด๋ฟŒ๊ฒŒ ์งœ์ง€?'๋ผ๋Š” ๊ณ ๋ฏผ์„ ํ•˜๋ฉด์„œ ๋กœ์ง์„ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, 
๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ๋กœ์ง์ด ์ ์  ์‚ฐ์œผ๋กœ ๊ฐ€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.... ๊ทธ๋ž˜์„œ ์ผ๋‹จ ์–ด์ฐŒ์ €์ฐŒ ๊ตฌํ˜„์€ ํ•ด๋†ง๋Š”๋ฐ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์ˆ˜์ผ๊ฒƒ ๊ฐ™๋‹ค. 
์ด๋˜ํ•œ ๋ฐฐ์šธ์ ์ด ์žˆ๊ฒ ์ง€!! ์•„์ž์ž
(๊ทผ๋ฐ 100% ์ˆ˜ํ•™์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๊ผญ ํ’€์–ด๋ด์•ผ์ง€!!!)

๋“€๋‚˜์˜ ์ฝ”๋“œ๋Š” ๋ณด๊ณ  ๋ฐฐ์šธ์ ์ด ์ฐธ ๋งŽ์€ ๊ฒƒ ๊ฐ™๋‹ค. ๊น”๋”ํ•˜๊ฒŒ ์งœ๋Š” ๊ฒƒ๋ถ€ํ„ฐ, ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” extension, Why์— ๋Œ€ํ•ด์„œ ํ•ญ์ƒ ์ƒ๊ฐํ•˜๋Š” ์  ๋“ฑ,,
์•„์ง ๋“€๋‚˜์—๊ฒŒ ๊ทธ๋ฆฌ๊ณ  ์žญ์—๊ฒŒ๋„ ๋‚˜๋Š” 1์ธ๋ถ„๋„ ๋‹ค ๋ชปํ•œ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์ด ๋“ค์–ด์„œ ๋„ˆ๋ฌด ์Šฌํ”ˆ ํ•˜๋ฃจ์˜€๋‹ค. 
ํŒ€์—๊ฒŒ ๋ฏผํ๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ์„ฑ์žฅ ๊ณก์„ ์„ ๊ฐ€ํŒŒ๋ฅด๊ฒŒ ๊ทธ๋ ค์•ผ์ง€! ์ ์  ๋‚˜๋„ ๋” ์ข‹์•„์ง€๊ฒ ์ง€ ๊ธ์‚ด๊ธ์‚ด (เน‘หƒฬตแด—ห‚ฬต)ูˆ```

 

๋ฐ˜์‘ํ˜•