๐ iOS & ๐น Flutter/๐ฅ ํธ๋ฌ๋ธ ์ํ 14 [iOS/Swift]๋ฒํผ์ ํ ๋ฒ๋ง ๋๋ ๋๋ฐ View๊ฐ ๋ ๋ฒ ๋ถ๋ฆฐ๋ค? ์์ฃผ ์์ํ ์ผ์ด ์์๋ค. ์ด๋ฏธ์ง ์ ์ฅํ๊ธฐ๋ฅผ ๋๋ ๋๋ฐ, ์ ์ฅ ์๋ฃ ํน์ ์ ์ฅ ์คํจ ํ์ ์ด ๋ ๋ฒ ๋ถ๋ฆฌ๋ ๊ฒ ์๋๊ฐ?๋ก์ง์์ ๋ฌธ์ ๊ฐ ์์๋ ์ถ์ด์ ํ์ ์ ํธ์ถํ๋ ๋ถ๋ถ์ ๋ธ๋ ์ดํฌ ํฌ์ธํธ๋ฅผ ์ฐ์ด๋ณด์๋๋ฐ, ๋ธ๋ ์ดํฌ ํฌ์ธํธ๋ ํ ๋ฒ๋ง ์กํ๋ค!!์ ํ์ ํธ์ถ์ ํ ๋ฒ ๋ง ๋๋๋ฐ ๋ทฐ๋ ๋๊ฐ๊ฐ ๋ถ๋ฆฌ์ง...? ์ด๊ฑฐ ์์ค์ฝ๋ ์๋ชป ์๋์ผ?! ๋ผ๊ณ ๊ดํ ํ์ ํด๋ณด์์ง๋ง.์ธ์ ๋ ์ฝ๋๋ ๊ฑฐ์ง๋ง์ ์ํ๋~ ์ ๋์ผํ ๋ทฐ๋ชจ๋ธ ๊ณต์ ํ ๋ด ์๋ชป~ํ์ฌ ๋ด ํ๋ก์ ํธ์๋ ํ๋กํ ์ด๋ฏธ์ง๋ฅผ ๋ณผ ์ ์๋ ์๊ฐ์ด ๋ ๋ฒ ์กด์ฌํ๋ค.1. ์ฒ์์ ํ๋กํ์ ๋ค ์์ฑํ ํ 2. ๋ง์ด ํ์ด์ง์์ ํ๋กํ ์นด๋ ๋ฒํผ์ ๋๋ฅธ ๊ฒฝ์ฐ๋ทฐ์๋ ์ฐจ์ด๊ฐ ์๊ธฐ์ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ง๋ค๊ณ ๋ทฐ๋ชจ๋ธ๋ง ๊ณต์ ํด ์คฌ์๋๋ฐ, ์ด๋ ๊ฐ์ ๋ค๋ฅธ ๋ทฐ๋ชจ๋ธ์ ์์ฑํด์ ๋ฃ์ด์ค ๊ฒ์ด ์๋๋ผ DIMa.. 2024. 7. 4. [iOS/Swift] UIView to UIImage without Display ์์ฆ IT ๋์๋ฆฌ ํ๋ก๊ทธ๋ผํผ์์ ์ฌ์ด๋ ํ๋ก์ ํธ๋ฅผ ํ๋ ์ค์ด๋ค. ํ๋กํ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ ๋ณด์ฌ์ฃผ๋ ํ๋ก์ ํธ์ธ๋ฐ, 1:1 ์ ๋ฐฉํฅ์ ํ๋กํ๊ณผ 3:4 ์ธ๋กํ์ ํ๋กํ ์ฌ์ง ๊ตฌํ์ ๋ณด์ฌ์ฃผ๋ฉด์ ๊ณ ๋ฏผ์ด ์๊ฒผ๋ค. ๋์์ธ ์ ์ด๋ฏธ์ง ๋ฐ์ ๋ฒํผ์ด ๊ฒน์น์ง ์๊ธฐ ์ํด 3:4 ์ธ๋กํ์ height๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํํ ๋ค ์ด๋ฏธ์ง๋ก ๋ง๋ค์ด ์ ์ฅํ๊ณ ๋ณด์ฌ์ค ๋๋ ๊ฐ๋ก ๋์ด๋ฅผ ์ธ๋ก ๊ธธ์ด์ ๋ง์ถ์ด ์ค์ด๋ ํ์์ผ๋ก ๊ตฌํํด์ผ ํ๋ค.๋ฌผ๋ก , ์ด๋ ๊ฒ ๋ณด์ด๋ ๊ฒ๊ณผ๋ ๋ค๋ฅด๊ฒ ์ด๋ฏธ์ง๋ก ์ ์ฅํ๊ธฐ๋ฅผ ๋๋ฅด๋ฉด 3:4์ ๊ฒฝ์ฐ ์์ ํ์ ์์ด ์นด๋ ์ด๋ฏธ์ง๋ง ์ ์ฅ๋์ด์ผ ํ๋ค. ๋๋ฌธ์ view ๊ณ์ธต์ ์ ์ผ ๋ฐ์์ CardView๋ฅผ ๊ทธ๋ฆฌ๊ณ , ํด๋น UIView๋ฅผ UIImage๋ก ์ ์ฅํ์ฌ ๋ถ๋ฌ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ์์ ์ ์ฐจ์ด ๋๋ฌธ์ UIImage๊ฐ ๋จ์ง ์์๋ค. ๊ณ ๋ฏผํ๋ค ์ฒ.. 2024. 7. 2. [iOS] Image url ํตํด ๊ฐ์ ธ์์ view์ ๋์ฐ๊ฑฐ๋ ๊ฐค๋ฌ๋ฆฌ ๋ค์ด๋ก๋ํ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง ๋น๊ต ์ด๋ฒ์ unsplash์ api๋ฅผ ๋ฐ์์ json ๋ฐ์ดํฐ๋ฅผ ํ์ธํด๋ณด๋ ์ ๊ธฐํ ์ ์ด ์์๋ค. image๋ ๋ฐ๋ก url ์ข ๋ฅ๋ก ์ฃผ์ด์ง๊ณ , ํด๋น url์ ๋ค์ ๋ฐ์์์ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ! ๋๋ฌธ์ image๋ฅผ ๋ค์ด๋ก๋ ํ์ฌ imageView์ ๋ฃ์ด์ฃผ๋ protocol์ ํ๋ ๋ง๋ค์๋ค. protocol ImageViewDownloadable { var imageView: UIImageView { get set } } ๊ทธ๋ฆฌ๊ณ extension์ผ๋ก ์ด ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ์๋ค๋ฉด image๋ฅผ ๋ณด์ฌ์ค ์๋ ์๊ณ , ๊ฐค๋ฌ๋ฆฌ์ ๋ค์ด๋ฐ์ ์๋ ์๋ ๋ฉ์๋๋ค์ ๊ฐ๊ฐ ๊ตฌํํ์๋ค. 1. URLSession.shared.dataTask , @escaping closure ๊ทธ๋ ๊ฒ ๋ง๋ ์ฒซ ๋ฐฉ๋ฒ์ dataTask์ @escaping c.. 2024. 2. 14. [iOS] UICollectionViewFlowLayout์ผ๋ก Pinterest Layout ๊ตฌํํ๊ธฐ ์ฒ์ ๊ณผ์ ๋ก ๋ฐ์ ํผ๊ทธ๋ง์ Pinterest๋ก ๊ตฌํ๋ View๋ฅผ ๋ณด๊ณ , Compositional๋ก ๋์ ํด์ผ์ง! ๋ผ๊ณ ํธ๊ธฐ๋กญ๊ฒ ์๊ฐํ๋ค. ๊ทธ๋ฌ๋ Compositional์ ๋ฒฝ์ ๋์๊ณ .. item๊ณผ group, section์ผ๋ก ํฌ๊ธฐ๋ฅผ ์ฃผ๋ ๊ฒ์์ item ํฌ๊ธฐ๋ค์ ์ด๋ป๊ฒ ๋ค๋ฅด๊ฒ ์ค์ผ ํ ์ง ๊ฐ์ด ์ ์กํ๋๋ผ. Section๋ณ๋ก๋ ์ฌ์ด๋ฐ!! ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๊น๋ณด๋ฉด, Compositional + Combine์ ์กฐํฉ์ผ๋ก pinterest๊ฐ ๊ตฌํ๋์ด ์์๋ค. ๊ทธ๋ฌ๋ RxSwift๋ Combine์ ์์ง ์ ๋ชจ๋ฅด๋๋ฐ, ๊ณผ์ ๊ธฐ๊ฐ์ ๋งค์ฐ ์งง์๊ธฐ์ ์ฐจ๋ง ์ด๋ฒ์ ๋์ ํ ์์ ์ ์์๋ค. ์ด๋ฏธ collectionView, diffable data source, compositional ๋ฑ ์ฒ์ ์จ๋ณด๋ ๊ฒ์ด ์ฐ๋๋ฏธ..... 2024. 1. 31. [iOS] Test ํ์ผ์ ๋ฃ์ Asset ์์ฑ์ ์ค๋ฅ_ Bundle ์ฌ์ฉ ํ ์คํธ์ฉ JSON ํ์ผ์ ์ดํ์๋ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด๊ธฐ์ test ํด๋์ ๋ฐ๋ก Asset catalog๋ฅผ ๋ง๋ค์ด์ ๊ทธ๊ณณ์์๋ง ๋ฃ์ด๋๊ณ ์ฌ์ฉํ๊ณ ์ถ์๋ค. ๋๋ฌธ์ ํด๋๋ฅผ ํ๋ ๋ง๋ค์ด์ ์ด๋ฆ์ Json.xcassets ์ผ๋ก ์ ์ธํ๊ณ ๊ทธ ์์ ํ์ผ์ ๋ฃ์๋ค. ๊ทธ๋ฐ๋ฐ asset catalog์ ๋ชจ์์ด ๊ธฐ์กด์ ๊ฒ๊ณผ๋ ๋ฌ๋๋ค. ํ์ธํด๋ณด๋ asset catalog๋ฅผ ๋ง๋ค๋๋ ๋จ์ํ๊ฒ ํด๋๋ฅผ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ File → New → File์ ํ๊ณ ๋ค์ด๊ฐ Resource์ Asset Catalog๋ฅผ ์ ํํ์ฌ ๋ง๋ค์ด์ผ ํ๋ค. ๊ทธ ํ test code๋ฅผ ์์ฑํ์ฌ ๋๋ฆฌ๋๋ฐ ์ด๋ฒ์๋ NSDataAsset์ ๊ฐ์ ธ์ค๋ guard๋ฌธ์์ ๊ณ์ retrun์ผ๋ก ๋น ์ง๋ฉฐ ์ข ๋ฃ๋์๋ค. guard let json = NSDataAsset(n.. 2024. 1. 28. [iOS] TableViewCell์์ layoutMarginsGuide ์ฌ์ฉ ํ ์ด๋ธ๋ทฐ์ Custom Cell์ ์ค์ ํ ๋ ์ฒ์์ ์ ์ฝ์กฐ๊ฑด์ ContentView์๋ง ๋ง์ท๋ค. private func configureCellConstraint() { NSLayoutConstraint.activate([ contentStackView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), contentStackView.topAnchor.constraint(equalTo: contentView.topAnchor), contentStackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), contentStackView.bottomAnchor.constraint(e.. 2024. 1. 6. ์ด์ 1 2 3 ๋ค์