<TIL>
์ด์ ๋ ์์ ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ ๊ฐ์ธ๊ณผ์ ํ์ ๊ตฌํ๊น์ง ๋ง๋ค์ด๋ณด๊ณ ,
์ค๋์ ์ถ๊ฐ ๊ตฌํ ์๋ํด๋ดค๋ค.
์ถ๊ฐ๊ตฌํ์ผ๋ก ์์ ๋ฆฌ์คํธ ์ญ์ , ๋น๊ฒจ์ ์๋ก๊ณ ์นจ ๊ตฌํ์ด ์์๋ค.
์ถ๊ฐ์ ์ผ๋ก ์์๋ฆฌ์คํธ์ ๋ด๊ธฐ ๋ฒํผ์ ํด๋ฆญํ์ ๋, alert๊ฐ ๋ฐ ์ ์๋๋ก ์ถ๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ์์๋ฆฌ์คํธ์์ ํด๋น ์ํ์ ์ญ์ ๋ฅผ ํ ํ,
์ฑ์ ์ข
๋ฃํ๋ค๊ฐ ๋ค์ ํค๋ฉด ๊ทธ๋๋ก ๋ค์ ๋๋์๊ฐ์๋ ๋ฌธ์ ๊ฐ ์์๋ค.
(๋ด๊ฐ ๋ฐ๋ณด์์.. ๐
์ฝ์ด๋ฐ์ดํฐ๋ก ๋ฐ์ดํฐ ์ ์ฅํด๋๊ณ , ์ฝ์ด๋ฐ์ดํฐ์์ ์ญ์ ๋ ์ํด์ ์๊ธด ๋ฌธ์ )
๊ทธ๋์ ๋ฐ์ดํฐ์์ ์ญ์ ํ๋ delete function์ ๋ง๋ ํ,
์
์ด ์ญ์ ๋ ์ดํ์ ์คํ๋๋๋ก ๋ณ๊ฒฝํด์ฃผ์๋ค.
์ค๋ Lv4 '์์๋ฆฌ์คํธ ์ญ์ '๋ ์๋ฃ!
์ด์ด์ Lv5 '๋น๊ฒจ์ ์๋ก๊ณ ์นจ'์ ๊ตฌํํ๋ค๊ฐ
scrollView์์ ์คํ ๋ ์ด์์ ์ก๋๋ฐ ์ด๋ ค์์ด ์์ด์
commit ํด๋
ผ ํ์ผ๋ก ๋ค์ ๋๋๋ ค๋๊ณ , ์ ํ๋ธ๋ก scrollView ๊ด๋ จํด์ ๊ณต๋ถํ๋ค.
ํด๋ณด๊ณ ์๋๋ฉด ์ผ๋จ์ tableView๋ก ์๋ก๊ณ ์นจ ๊ตฌํ์ ํด๋ณด๋ ค๊ณ ํ๋ค!
๊ณผ์ ๊ตฌํ ๊ณผ์ ์ ๊ด๋ จํด์๋ ๋ด์ผ ์ ๋ฆฌํ ์๊ฐ์ด๋ค.
์ค๋์ ๊ฐ๋ตํ๊ฒ ์ด๋ฒ ๊ณผ์ ์ ๋ํด์ ์ ๋ฆฌํ๊ณ ,
scrollView์ ๋ํด์ ๊ณต๋ถํ ๋ด์ฉ๊ณผ ๊ณผ์ ์ ์ถ๊ฐํ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
์์ ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ
scrollView
๋ฉ์ธํ๋ฉด์ ์๋๋ก ์คํฌ๋กคํ๋ฉด,
์๋ก๊ณ ์นจ์ด ๋์ '๋ค๋ฅธ ์ํ ๋ณด๊ธฐ ๋ฒํผ'์ ํด๋ฆญํ์ ๋์ ๊ฐ์ ๋์์ด ๋ฐ์ํ ์ ์๋๋ก ํด์ผํ๋ค.
๋
ธ๋์์ผ๋ก ํ์ํ ๋ถ๋ถ!
imageView์ StackView๋ก ๋ฌถ์๋ Label 3๊ฐ
์ ๋ค๋ค๋ง ์คํฌ๋กค ๋๋ก๋ก ํ๋ ค๊ณ ํ๋ค.
์ค๋ ์๋ํ๋ค๊ฐ ์คํจํ๋ ์ด์ ๊ฐ
ScrollView ์ถ๊ฐํ๊ณ , ์์ UIView ์ถ๊ฐํ๊ณ
๊ทธ ์์ ์ด ๋ ๊ฐ์ง ๋
์๋ค์ ๋ฃ์ด์คฌ์๋๋ฐ,
์คํ ๋ ์ด์์์ด ๋๋ฌด ๋ง์์ ธ์ ์ด๋ ๋ถ๋ถ์ ๋์น๊ฑด์ง ์ ์ ์์ด์
์ด๊ฒ์ ๊ฒ ๋ฐ๊ฟ๋ณด๋ค๊ฐ ๋ค์ฃฝ๋ฐ์ฃฝ ๋์ด๋ฒ๋ ธ์๋ค..
๊ทธ๋์ ๋ค์ ์ฐจ๊ทผ์ฐจ๊ทผ ScrollView ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๊ณ ํด๋ณด๊ธฐ!!
(์ฐธ๊ณ ํ๋ ๋ธ๋ก๊ทธ : https://nareunhagae.tistory.com/45)
์คํฌ๋กค ๋ทฐ ์ด๋ ค์ฐ์ ๋ถ๋ค ์ด๊ฑฐ ๋ณด์ธ์..
์ง์ง ์ ๋ฆฌ ์๋์ด์๊ณ , ์ด๊ฑฐ๋ณด๊ณ ๋ฐ๋ผํด์ ์คํ ๋ ์ด์์ ๊ฒฝ๊ณ ๋ ์๋ฌ
๋ค ์ฌ๋ผ์ก์ต๋๋ค!!
์ฒ์๋ถํฐ ์คํฌ๋กค ๋ทฐ๋ฅผ ์ฌ์ฉํ ๊ฑธ ์๊ณ , ๋ง๋ค์ด์ ์์ํ๋ค๋ฉด ์ ๋ง ์ข์๊ฒ ์ง๋ง..
LV5 ์ถ๊ฐ ๊ตฌํ์ ์์๊ธฐ ๋๋ฌธ์
์ง๊ธ ๋ง๋ค์ด ๋์ ๋ถ๋ถ์ ์์ ํด์ผํ๋ค!
<ScrollView ์ถ๊ฐ ๊ณผ์ >
โ UIView๋ฅผ safeArea์ ์ถ๊ฐํ๊ธฐ
โก ์ด View ์์ ๋ฃ์ผ๋ ค๋ ์์๋ค ๋ฃ๊ธฐ
(imageView, StackView(Label 3๊ฐ))
โข ScrollView๋ฅผ safeArea์ ์ถ๊ฐํ๊ธฐ
โฃ ScrollView์ ์์๋ค ๋ฃ์ View ๋ฃ๊ธฐ
โค View๋ฅผ ScrollView์ constraints๋ฅผ leading, trailing, top, bottom ๋ชจ๋ 0์ผ๋ก ๋ง์ถ๊ธฐ
โฅ View ๊ธฐ์ค์ผ๋ก imageView, StackView(Label 3๊ฐ) ์คํ ๋ ์ด์์ ์ก๊ธฐ
โฆ ์ด View๋ฅผ Frame Layout Guide์ Equal Width ํด์ฃผ๊ธฐ
(์ ์๋๋ก ์คํฌ๋กค ํ๊ณ ์ถ๋ค๋ฉด, Equal Width
์ข์ฐ๋ก ์คํฌ๋กค ํ๊ณ ์ถ๋ค๋ฉด, Equal Height
์ํ์ข์ฐ ์์ ๋ถ๋ฐฉํ๊ฒ ์คํฌ๋กค ํ๊ณ ์ถ๋ค๋ฉด, ์๋ต)
์ด๋ ๊ฒ ํ๋ฉด ScrollView ์ถ๊ฐํด์ ์คํ ๋ ์ด์์์ก๊ธฐ ๋!!!
์ด์ ์ด ScrollView๋ฅผ ์ฝ๋์ ์์ธ๋ ์ฐ๊ฒฐํด์ฃผ๊ณ ,
์๋ก๊ณ ์นจ ์ฝ๋ ์์ฑ๋ง ํ๋ฉด ๋๋ค!
func configureRefreshControl() {
containerScrollView.refreshControl = UIRefreshControl()
containerScrollView.refreshControl?.addTarget(self, action: #selector(handleRefreshControl), for: .valueChanged)
}
@objc func handleRefreshControl() {
updateProduct()
DispatchQueue.main.async {
self.containerScrollView.refreshControl?.endRefreshing()
}
}
์ด๋ ๊ฒ ํ๋ฉด, ์๋ก๊ณ ์นจ์ด ํ์ฑํ ๋๋ค!
(updateProduct()๋ '๋ค๋ฅธ ์ํ ๋ณด๊ธฐ ๋ฒํผ' ํด๋ฆญํ์ ๋, ๋์ํ๋ ์ฝ๋์)
๊ทธ๋ฐ๋ฐ, viewDidLoad์ configureRefreshControl()๋ฅผ ์ถ๊ฐํ ํ ์คํํด๋ณด๋ฉด?
๋ญ๊ฐ ํ์ ํ ๋๋์ด ๋ค ๊ฒ์ด๋ค.๐ณ
๊ทธ ์ด์ ๋! ๋ฆฌํ๋ ์ ์ธ๋์ผ์ดํฐ๊ฐ ๊ณ ์ ๋์ง ์๊ณ , ๋ฐ๋ก ์ฌ๋ผ๊ฐ๊ธฐ ๋๋ฌธ์!
์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ฌ์ฉํ๋ ์ดํ๋ค์ ์๋ก๊ณ ์นจ๊ณผ ์ด์ง ์ด์ง๊ฐ์ด ๋ค์๋ ๊ฒ!!
@objc func handleRefreshControl() {
updateProduct()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.containerScrollView.refreshControl?.endRefreshing()
}
}
๋ฐฉ๊ธ ์์ ์ฝ๋์์ async์ asyncAfter๋ก๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
๋ค์ ์คํํด๋ณด๋ฉด??
์ด๋ ๊ฒ 0.5์ด๋์ ์ ์ ์๋ก๊ณ ์นจ์ ๋จธ๋ฌผ๋ฌ์๋ค๊ฐ
endRefreshing() ๋ฉ์๋๋ฅผ ํธ์ถํด์ ์๋ก๊ณ ์นจ์ด ์๋ฃ๋๋ ๋ชจ์ต!
'iOS ์ฑ ๊ฐ๋ฐ ์ข ํฉ๋ฐ > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
7์ฃผ์ฐจ_5์ผ์ฐจ_์ฑ ๊ฐ๋ฐ ์๋ จ_Closure(ํด๋ก์ )_๊ฐ์ธ๊ณต๋ถ_TIL (0) | 2024.04.19 |
---|---|
7์ฃผ์ฐจ_4์ผ์ฐจ_์ฑ ๊ฐ๋ฐ ์๋ จ_๊ฐ์ธ๊ณต๋ถ_TIL (2) | 2024.04.18 |
7์ฃผ์ฐจ_iOS ์ฑ ๊ฐ๋ฐ ์๋ จ_3~4์ผ์ฐจ_Standard๋ฐ AutoLayout_TIL (0) | 2024.04.11 |
7์ฃผ์ฐจ_iOS ์ฑ ๊ฐ๋ฐ ์๋ จ_2์ผ์ฐจ_TIL (0) | 2024.04.09 |
7์ฃผ์ฐจ_ํค์ค์คํฌ ๋ง๋ค๊ธฐ_1์ผ์ฐจ_์ฒซ ํ ํ๋ก์ ํธ ๋ง๋ฌด๋ฆฌ_TIL (0) | 2024.04.08 |