๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŽ iOS122

[iOS/Swift] Carousel Effect - UIEdgeInset์ด ์žˆ๋Š” UICollectionView ํŽ˜์ด์ง• ํ•˜๊ธฐ ์ •๋ง ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ ์ปฌ๋ ‰์…˜ ๋ทฐ ํŽ˜์ด์ง•! UICollectionView ์†์„ฑ์— isPagingEnable์ด ์žˆ์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์…€๊ณผ ์…€ ์‚ฌ์ด์— minimumLineSpacing์ด ๋“ค์–ด๊ฐ€๊ฑฐ๋‚˜ sectionInset์ด ๋“ค์–ด๊ฐ€๋ฉด ํŽ˜์ด์ง•์ด ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ๐Ÿฅฒ scrollViewDidScroll์—์„œ ๋กœ๊ทธ๋ฅผ ์ฐ์–ด๋ณด๋ฉด ๊ทธ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ์š” UIScreen์˜ ๋„“์ด๊ฐ€ 390์ด๊ณ  ํ•œ๋ฒˆ ํŽ˜์ด์ง•์ด ๋ ๋•Œ ํ™”๋ฉด ๋„“์ด ๋งŒํผ ํŽ˜์ด์ง•์ด ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์–ด์š” ์…€ ์‚ฌ์ด์ฆˆ๋Š” 320์œผ๋กœ ํ™”๋ฉด ๋„“์ด๋ณด๋‹ค ์ž‘๊ณ  minimumLineSpacing์„ 7๋กœ ์„ค์ •ํ•ด ์คฌ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ์— ํ™”๋ฉด ๋„“์ด ๋งŒํผ ํŽ˜์ด์ง• ํ•˜๋ฉด ํ‹€์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค! ์ขŒ์šฐ ์—ฌ๋ฐฑ ํฌํ•จ, ์…€ ์‚ฌ์ด spacing ๊นŒ์ง€ ํฌํ•จํ•ด์„œ ํŽ˜์ด์ง•์ด ๋˜๊ฒŒ ํ•˜๋Š” UI ๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ.. 2022. 5. 31.
[Swift] ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฒ• init, property, method ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์˜์กด์„ฑ(Dependency)์ด ๋ฌด์—‡์ธ์ง€, ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„ ๋ดค์Šต๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ํฌ์ŠคํŒ…ํ•˜๋ ค๊ณ  ํ•ด์š”. ๊ฐœ๋ฐœํ•  ๋•Œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ๊ฐ์ฒด๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ ์ฃผ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋“ค ๊ฒฝํ—˜ํ•˜์…จ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฝ์–ด ๋ณด์‹œ๋ฉด ๊ฐ์ด ์žกํž ํ…Œ์ง€๋งŒ ๊ทธ๋ž˜๋„ DI๋ฅผ ๋ณด๊ณ  ์˜ค์‹œ๋ฉด ์ดํ•ด๊ฐ€ ๋” ์‰ฝ๊ฒŒ ์ž˜ ๋  ๊ฑฐ์—์š”! DI์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๋ฉด ์ด ๊ธ€์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! iOS ์•ฑ์„ ๋งŒ๋“ค๋•Œ ์šฐ์„  ๊ฐœ๋ฐœ ์ผ์ •์— ๋งž์ถ”์–ด ์ž‘๋™์ด ๋˜๋„๋ก ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๊ฒ ์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง€๊ณ  ๊ทธ์— ๋”ฐ๋ผ ํ™”๋ฉด์ด ๋งŽ์•„์ง€๋ฉด์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ์™€ ์˜์กด๊ด€๊ณ„๋„ ๋งŽ์•„์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข€๋” ํšจ๊ณผ์ ์œผ๋กœ ์˜์กด๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์œ ๋ฆฌํ•˜๊ฒŒ .. 2022. 5. 5.
[Swift] ์˜์กด์„ฑ ์ฃผ์ž… ์™œ ํ•„์š”ํ• ๊นŒ? DI ์•Œ์•„๋ณด๊ธฐ ์ฒ˜์Œ Swift๋กœ iOS ์•ฑ์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋งŒ ํ•ด๋„ ๊ตฌํ˜„์— ์ดˆ์ ์„ ๋‘์—ˆ์ง€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์€ ํ•˜์ง€ ๋ชปํ–ˆ๋˜๊ฑฐ ๊ฐ™์•„์š”! ์ด์ œ ์–ด๋Š๋ง ์–ธ์–ด๊ฐ€ ์ต์ˆ™ํ•ด ์ง€๊ณ  ์‚ฌ์šฉ์ž ์ธก๋ฉด์„ ๊ณ ๋ คํ•˜๋ฉด์„œ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ, ์•ฑ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋˜๋”๋ผ๊ตฌ์š”! ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Swift ์–ธ์–ด๋ณด๋‹ค๋Š” Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ฃผ๋กœ ๋‹ค๋ฃจ๋Š” ๋‚ด์šฉ์ธ DI์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค~ DI๋‚˜ loC๊ฐ€ ์˜์กด์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ฃผ์ž…ํ•  ๊ฒƒ์ด๋ƒ์— ๋Œ€ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋”ฑ ์–ด๋Š ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค๊ฐ€ ์•„๋‹ˆ๋ผ์„œ Swift๋กœ ์–ด๋–ป๊ฒŒ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์„์ง€, ์˜์กด์„ฑ์€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค. ์˜์กด์„ฑ์ด๋ž€? ์˜์กด์„ฑ์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์ œ ์ฝ”๋“œ ํ•˜๋‚˜๋ฅผ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค~ class Zoo { let animal: Bear init() {.. 2022. 4. 29.
[Swift] insetBy ์•Œ์•„๋ณด๊ธฐ insetBy(dx:dy) Core Graphic์˜ CGRect์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ offset์ด point๋ผ๋ฉด inset์€ ์‚ฌ์ด์ฆˆ๊ฐ€ ์žˆ๋Š” ๊ณต๊ฐ„. ์•ˆ์ชฝ์œผ๋กœ ๋งˆ์ง„์„ ์คŒ ์ค‘์•™์ ์„ ๊ธฐ์ค€์œผ๋กœ dx, dy ๊ฐ’์„ ํ†ตํ•ด ์กฐ์ •๋œ, ์›๋ณธ ์ง์‚ฌ๊ฐํ˜• ๋ณด๋‹ค ๋” ํฌ๊ฑฐ๋‚˜ ๋” ์ž‘์€ ์‚ฌ๊ฐํ˜•์„ ๋ฐ˜ํ™˜ Parameters dx x ์ขŒํ‘œ ๊ฐ’ ์›๋ณธ ์ง์‚ฌ๊ฐํ˜• ๋ณด๋‹ค ํฌ๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ์Œ์ˆ˜๋ฅผ, ๋” ์ž‘๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ์–‘์ˆ˜๋ฅผ ์ง€์ •ํ•จ dy y ์ขŒํ‘œ ๊ฐ’ ์›๋ณธ ์ง์‚ฌ๊ฐํ˜• ๋ณด๋‹ค ํฌ๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ์Œ์ˆ˜๋ฅผ, ๋” ์ž‘๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ์–‘์ˆ˜๋ฅผ ์ง€์ •ํ•จ ์˜ˆ์‹œ newView.bounds = originalView.bounds.insetBy(dx: 20, dy: 0) inset by ์ „ : (0.0, 0.0, 100.0, 40.0) inset by ํ›„ : (20.0, 0.0, 60.0, 40.. 2022. 4. 23.
[iOS/Swift] xib๋ฅผ ์ด์šฉํ•œ Custom UIView ๋งŒ๋“ค๊ธฐ UIViewController, UITableViewCell, UICollectionViewCell, UICollectionReusableView ๋“ฑ์„ ์ƒ์† ๋ฐ›๋Š” subclass ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋•Œ xib๋ฅผ ํ•จ๊ป˜ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์•„์‰ฝ๊ฒŒ๋„ UIView๋Š” ํŒŒ์ผ ์ƒ์„ฑ์‹œ ํ•จ๊ป˜ xib๋ฅผ ๋งŒ๋“ค์–ด ์ค„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹น ์šฐ์„ ์€ UIView์˜ Subclass์ธ CommonTextField๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค ์ƒˆ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  Class ๋ช…์„ ์ž…๋ ฅํ•œ ํ›„ Subclass๋Š” UIView๋กœ ์ƒ์† ๋ฐ›์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค Next๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ์ง„ํ–‰ํ•ด ์ค๋‹ˆ๋‹ค. ์ด์ œ xib ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  User Interface ์„น์…˜์—์„œ ๋ณด์ด๋Š” View๋ฅผ ์„ ํƒํ•ด ์ฃผ๋ฉด xib ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์ €๋Š” ์ด์ „์— ์ƒ์„ฑํ•œ UIView ๋ฅผ.. 2022. 4. 10.
[iOS/Swift] ๋ช‡ ์ดˆ ํ›„์— ์ฝ”๋“œ ์‹คํ–‰ํ•˜๊ธฐ DispatchQueue asyncAfter DispatchQueue ํด๋ž˜์Šค์— ์žˆ๋Š” public func asyncAfter(deadline: DispatchTime, execute: DispatchWorkItem) ์„ ์‚ฌ์šฉํ•ด ์ค๋‹ˆ๋‹ค deadline์€ DispatchTime์„ ๋ฐ›๋Š”๋ฐ .now() ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. execute์—๋Š” deadline ์ดํ›„์— ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ํด๋กœ์ €๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค 3์ดˆ ํ›„์— execute์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹น DispatchQueue.main.asyncAfter(deadline: .now() + 3, execute: { // ์‹คํ–‰ํ•  ์ฝ”๋“œ ์ž‘์„ฑ }) ์˜ˆ์‹œ DispatchQueue.main.asyncAfter(deadline: .now() + 3, exec.. 2022. 3. 19.
[iOS/Swift] custom font ์ง€์ •ํ•˜๊ณ  UIFont ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ์‹œ์Šคํ…œ ํฐํŠธ๊ฐ€ ์•„๋‹Œ ์›ํ•˜๋Š” ๊ธ€๊ผด์„ iOS ํ”„๋กœ์ ํŠธ์— ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”! ๊ฐ‘์ž๊ธฐ ์ด์œ ์—†์ด ํฌ๋ž˜์‰ฌ ๋‚˜๋Š” ์ด์œ ๋„ ์•Œ์•„๋ด…์‹œ๋‹น ์šฐ์„  ์›ํ•˜๋Š” ๊ธ€๊ผด์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์ฃผ์„ธ์š” ์ €๋Š” ์ฃผ๋กœ "๋ˆˆ๋ˆ„" ๋ผ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์š” ์ƒ์—…์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํฐํŠธ๋ฅผ ๋ชจ์•„๋†“์€ ์‚ฌ์ดํŠธ์—ฌ์„œ ์‰ฝ๊ฒŒ ์›ํ•˜๋Š” ๊ธ€๊ผด์„ ์ฐพ์•„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š” https://noonnu.cc/ ๋ˆˆ๋ˆ„ ์ƒ์—…์šฉ ๋ฌด๋ฃŒํ•œ๊ธ€ํฐํŠธ ์‚ฌ์ดํŠธ noonnu.cc ์›ํ•˜๋Š” ํฐํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ ๋ผ์ด์„ ์Šค ์š”์•ฝํ‘œ๋ฅผ ๊ผญ ํ™•์ธํ•ด ๋ณด์„ธ์šค ์ฃผ๋กœ ํฐํŠธ๋ฅผ ๋ฐ›์„ ๋•Œ ๋‘ ๊ฐ€์ง€ ํ™•์žฅ์ž๊ฐ€ ์žˆ์„ ๊ฑฐ์—์š”! .otf Open Type Font .ttf Tru Type Font xCode๋Š” ๋‘๊ฐ€์ง€ ํ™•์žฅ์ž ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹น ํฐํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์œผ๋ฉด ์ฃผ๋กœ zip ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ ๊ฑฐ์—์š” ๋”.. 2022. 3. 19.
[Swift] PHPhotoLibraryChangeObserver ์™€ LimitedAccessAlert ์ด์ „ ํฌ์ŠคํŒ…์— ์ด์–ด์„œ PHPhotoLibraryChnageObserver์— ๋Œ€ํ•ด์„œ ํฌ์ŠคํŒ… ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค~ PHPhotoLibraryChnageObserver๋ž€? ์ด๋ฆ„์—์„œ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด PH / Photo Library / Chnage Observer ์ž…๋‹ˆ๋‹ค. PhotoKit์—์„œ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ์„œ ์‚ฌ์šฉ์ž์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ™œ์„ ํ•ฉ๋‹ˆ๋‹ค ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ํ™•์ธํ•ด ๋ดค์„ ๋•Œ PHAsset์„ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉ์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” ์‚ฌ์ง„์ด๋‚˜ ๋™์˜์ƒ์„ ๊ฐ€์ง€๊ณ  ์˜ค๋ฉด ๋  ํ…๋ฐ ์™œ ์˜ต์ €๋ฒ„ ํ˜•ํƒœ๋กœ ํ”„๋กœํ† ์ฝœ์„ ์ œ๊ณตํ•ด ์ฃผ๋Š” ๊ฑธ๊นŒ์š”? ์šฐ์„  ์‚ฌ์šฉ์ž์˜ PHAsset์„ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด let allPhotos = PHAsset.fetchAssets(with: phFetchOptions) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐ์ฒด๋“ค.. 2022. 2. 10.
[Swift] PhotoKit ์‚ฌ์šฉํ•ด์„œ ์ปค์Šคํ…€ ์•จ๋ฒ” ๋งŒ๋“ค๊ธฐ - UICollectionViewController cell์— PHAsset ๋„ฃ๊ธฐ ์ด์ „ ๊ธ€์—์„œ PhotoKit์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ถŒํ•œ์„ ์–ป์–ด์˜ค๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋Œ€์‘ํ•ด๋ณด์•˜๋Š”๋ฐ์š” PHPhotoLibraryChnageObserver๋ฅผ ๋จผ์ € ํฌ์ŠคํŒ… ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ์•„๋ฌด๋ž˜๋„ UICollectionViewController๋กœ ์ปค์Šคํ…€ ์•จ๋ฒ”์˜ ํ‹€์„ ๋งŒ๋“  ํ›„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ PHAsset์— ๋Œ€ํ•œ ๊ธ€ ๋ถ€ํ„ฐ ์ ๊ฒŒ ๋˜์—ˆ์–ด์šค PHAsset ์ด๋ž€? ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ฐ”์ผ ๋””๋ฐ”์ด์Šค๋Š” ๋žฉํƒ‘์ด๋‚˜ ์ปดํ“จํ„ฐ์— ๋น„ํ•ด ๊ต‰์žฅํžˆ ํ•œ์ •์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (์š”์ฆ˜์€ ์„ฑ๋Šฅ์ด ์˜›๋‚ ์— ๋น„ํ•ด ๋งค์šฐ๋งค์šฐ ์ข‹์•„์กŒ์ง€๋งŒ) ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ๊ฐค๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ์ง„์„ ๊ธ์–ด๋‹ค๊ฐ€ ์•ฑ์— ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ UITableViewCon.. 2022. 2. 7.
[Swift] PhotoKit ์‚ฌ์šฉํ•ด์„œ ์ปค์Šคํ…€ ์•จ๋ฒ” ๋งŒ๋“ค๊ธฐ - Permission ์ฒ˜๋ฆฌํ•˜๊ธฐ PHPhotoLibrary์˜ authorizationStatus์™€ requestAuthorization ๐Ÿ‘‹ SNS ์•ฑ์ด๋‚˜ ์‚ฌ์ง„์„ ์—…๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์•ฑ์ด๋ผ๋ฉด ์‚ฌ์šฉ์ž ๊ฐค๋Ÿฌ๋ฆฌ์— ์ ‘๊ทผํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ๋ฐ์š”, ์‚ฌ์‹ค ์• ํ”Œ์—์„œ๋Š” ์ด๋ฏธ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก UIImagePickerController์™€ PHPickerViewController์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ํด๋ž˜์Šค์— ์ ‘๊ทผ ๊ถŒํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ง„์„ ์„ ํƒํ•˜๊ณ  ์ด ์‚ฌ์ง„ ์ •๋ณด๋ฅผ ๋ฐ›์•„ ์˜ฌ ์ˆ˜ ์žˆ์ฃ ! ๐Ÿ‘‹ ๊ทธ๋Ÿฌ๋‚˜ UI/UX๊ฐ€ ๊ธฐ์กด iOS์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ํ˜•ํƒœ์™€ ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค๋ฉด ์ง์ ‘ ๊ฐค๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•ด ์ฃผ๊ฑฐ๋‚˜ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ OS์—์„œ ์ œ๊ณตํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ง์ ‘ ๊ตฌํ˜„์„ ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด ๊นŒ๋‹ค๋กญ๊ธฐ๋Š” ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋ผ์„œ ์ด์ „์— ์ปค์Šคํ…€ ๊ฐค๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”, ์ด๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด๋ฉด์„œ ์•Œ๊ฒŒ๋œ.. 2022. 2. 5.
[iOS/xCode] ๋‚ด๋ถ€ ํŒŒ์ผ Bundle๋กœ ๋ชป ์ฐพ์„ ๋•Œ ํ•ด๊ฒฐ๋ฒ• ๋„คํŠธ์›Œํ‚น์„ ํ•  ๊ฒฝ์šฐ json ํŒŒ์ผ์ด๋‚˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ api ๋กœ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ๋‚˜ ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ ๋‚ด๋ถ€์— ์žˆ๋Š” ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ์š”, ์ด๋•Œ ํŒŒ์ผ ๋””๋ ‰ํ† ๋ฆฌ์— ์ •์ƒ์ ์œผ๋กœ ๋“ค์–ด ์žˆ์œผ๋‚˜ ๊ทธ path๋ฅผ bundle๋กœ ์ ‘๊ทผ ๋ชปํ•˜์—ฌ nil์„ ๋ฑ‰์–ด ๋‚ด๋Š” ๊ฒฝ์šฐ ํ•ด๊ฒฐ๋ฒ•์ž…๋‹ˆ๋‹ค~ ์šฐ์„  ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ฆญํ•ด ์ฃผ์„ธ์š” Target์„ ์„ ํƒํ•ด ์ฃผ์‹œ๊ณ  ๋„ค๋น„๊ฒŒ์ด์…˜์—์„œ Build Phases๋ฅผ ํด๋ฆญํ•ด ์ค๋‹ˆ๋‹ค ์—ฌ๊ธฐ์— Copy Bundle Resources ๊ฐ€ ๋ณด์ด๋Š”๋ฐ ์ด ํ•ญ๋ชฉ์„ ๋ˆŒ๋Ÿฌ์„œ ํŽผ์ณ์ฃผ์„ธ์š” + Build Phases ๋ž€? ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๋นŒ๋“œ ๋‹จ๊ณ„ ์ž…๋‹ˆ๋‹ค ๋นŒ๋“œ ์˜ต์…˜์ด๋‚˜ ๋นŒ๋“œ์‹œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์„ค์ •์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ณ€๊ฒฝํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด Build Phases ์ž…๋‹ˆ๋‹ค + ๋ฅผ ๋ˆŒ๋Ÿฌ์„œ Bu.. 2022. 1. 17.
[Swift] ์ฝ”๋“œ๋กœ ์Šคํ† ๋ฆฌ๋ณด๋“œ ์—ฐ๊ฒฐํ•˜๊ธฐ how to load UIViewController with Storyboard Programmatically ์ฝ”๋“œ๋กœ ์Šคํ† ๋ฆฌ๋ณด๋“œ ์—ฐ๊ฒฐํ•˜๊ธฐ ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— ์žˆ๋Š” ๋…์˜ ์ฒซ๋ฒˆ์งธ ์•„์ด์ฝ˜์„ ์˜ค๋ฅธ์ชฝ ๋งˆ์šฐ์Šค๋กœ ๋“œ๋กœ๊ทธ์•ค ๋“œ๋กญ ํ•˜์—ฌ ๋ทฐ๋กœ ๋–จ์–ด๋œจ๋ ค ์ค์‹œ๋‹น Outlets์—์„œ view๋ฅผ ์„ ํƒํ•˜์—ฌ ์—ฐ๊ฒฐํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹น ์ธ๋””์ผ€์ดํ„ฐ์—์„œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด xCode ํ™”๋ฉด ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— identity indicator ๊ฐ€ ๋œฌ๋‹ค ๋งŒ์•ฝ ๋œจ์ง€ ์•Š์œผ๋ฉด ์•„์ด์ฝ˜์„ ๋ˆŒ๋Ÿฌ ์ด๋™. Stroryboard ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•ด ์ค„ ๊ฒƒ์ด๋ฏ€๋กœ Storyboard ID์— ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ค๋‹ˆ๋‹ค ๊ทธ ํ›„ ์ฝ”๋“œ๋กœ ๋Œ์•„์™€์„œ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด๋ฅผ ์–ป์–ด ๋ณด๋ฉด let viewController = UIStoryboard(name: "์Šคํ† ๋ฆฌ๋ณด๋“œ ์ด๋ฆ„", bundle: nil) .instantiateViewController(withIdentifier: "storyboa.. 2022. 1. 11.