๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ 93

[ ์งง์€ ] 1 - PHPhotoViewController

๐Ÿ’๐Ÿป‍โ™€๏ธ'์งง์€' ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉฐ ๋งค์ผ ๋ฐฐ์šฐ๋Š” ๋‚ด์šฉ๋“ค์ด ๋งŽ์€๋ฐ ํ•ญ์ƒ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•ด์•ผ์ง€ ํ•ด๋„ ๋ธ”๋กœ๊ทธ ์ •๋ฆฌ๋Š” ๊ณต๋ถ€์—์„œ ๊ตฌ์„ฑ๊นŒ์ง€ ๋ฉฐ์น ์ด ์†Œ์š”๋˜๊ธฐ์— ๋‹น์žฅ ๊ธ‰ํ•œ ํ”„๋กœ์ ํŠธ์— ๋ฐ€๋ ค ๊ฒฐ๊ตญ ์ฃผ์ œ๊ฐ€ ๊ธฐ์–ต์ด ๋‚˜์ง€ ์•Š์•„ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๋‹ค. ์˜ค๋Š˜๋„ PhotoKit๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์•Œ๊ฒŒ ๋œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ธ‰ํ•ด ๊ฒฐ๊ตญ์€ ํ•˜๋ฃจ๊ฐ€ ๋๋‚˜๋ฒ„๋ ธ๋‹ค. ํ•˜์ง€๋งŒ ๋”์ด์ƒ์€ ๋„˜์–ด๊ฐ€๊ณ  ์‹ถ์ง€ ์•Š์•„ 30๋ถ„๋งŒ์— ์ •๋ฆฌํ•˜๋Š” ์งง์€ ๊ธฐ๋ก์„ ํ•˜๊ธฐ๋กœ ๊ฒฐ์‹ฌํ–ˆ๋‹ค! ๐Ÿ“ธPHPickerViewController ์‚ฌ์šฉ์ž ๊ธฐ๊ธฐ์˜ ์•จ๋ฒ”์„ ์—ด์–ด ์‚ฌ์ง„์„ ์—…๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์ •๋ง ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋Š” ์นดํ†ก์˜ 'ํ”„๋กœํ•„ ์‚ฌ์ง„ ์„ค์ •'์ด ์žˆ๋‹ค. ์˜ค๋Š˜ ํ”„๋กœ์ ํŠธ์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์„ค์ •์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด PHPickerViewController๋ฅผ ์‚ฌ์šฉํ•˜..

์งง์€ 2023.08.10

[ iOS ] Bounds์™€ Frame ๋น„๊ต - 2. Size

๐Ÿค” ๋ฌธ์ œ ๐Ÿค” Bounds์™€ Frame์˜ ์ฐจ์ด๋Š” ๋ญ˜๊นŒ? UIView์—๋Š” bounds ํ”„๋กœํผํ‹ฐ์™€ frame ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ด๋„ ๋‘˜์˜ ์ฐจ์ด๋Š” ํฌ๊ฒŒ ์™€๋‹ฟ์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ StoryBoad๋ฅผ ์‚ฌ์šฉํ•ด ์‹ค์Šตํ•˜๋ฉฐ View์˜ Bounds์™€ Frame์„ ๋น„๊ต ๋ถ„์„ ํ•ด๋ณด์ž! 1ํŽธ ๋ณด๊ธฐ [ iOS ] Bounds์™€ Frame ๋น„๊ต - 1. ๊ณต์‹๋ฌธ์„œ์™€ origin ๐Ÿค” ๋ฌธ์ œ ๐Ÿค” Bounds์™€ Frame์˜ ์ฐจ์ด๋Š” ๋ญ˜๊นŒ? UIView์—๋Š” bounds ํ”„๋กœํผํ‹ฐ์™€ frame ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ด๋„ ๋‘˜์˜ ์ฐจ์ด๋Š” ํฌ๊ฒŒ ์™€๋‹ฟ์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ StoryBoad๋ฅผ ์‚ฌ์šฉํ•ด ์‹ค์Šตํ•˜๋ฉฐ View์˜ Bounds์™€ Fra 88yhtserof.tistory.com 2. Size 1ํŽธ์— ์ด์–ด 2ํŽธ์—์„œ๋Š” bounds์™€ frame..

iOS 2023.07.01

[ iOS ] Bounds์™€ Frame ๋น„๊ต - 1. ๊ณต์‹๋ฌธ์„œ์™€ origin

๐Ÿค” ๋ฌธ์ œ ๐Ÿค” Bounds์™€ Frame์˜ ์ฐจ์ด๋Š” ๋ญ˜๊นŒ? UIView์—๋Š” bounds ํ”„๋กœํผํ‹ฐ์™€ frame ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ด๋„ ๋‘˜์˜ ์ฐจ์ด๋Š” ํฌ๊ฒŒ ์™€๋‹ฟ์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ StoryBoad๋ฅผ ์‚ฌ์šฉํ•ด ์‹ค์Šตํ•˜๋ฉฐ View์˜ Bounds์™€ Frame์„ ๋น„๊ต ๋ถ„์„ ํ•ด๋ณด์ž! 1. ๊ณต์‹๋ฌธ์„œ์™€ origin ๐Ÿ“š๊ณต์‹๋ฌธ์„œ ํ™•์ธํ•˜๊ธฐ Bounds์˜ ๊ณต์‹๋ฌธ์„œ /UIKit /Views and controls /UIView /bounds Instance Property bounds ์ž์ฒด ์ขŒํ‘œ ์‹œ์Šคํ…œ์œผ๋กœ ํ•ด๋‹น view์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฒฝ๊ณ„ ์‚ฌ๊ฐํ˜• ๊ธฐ๋ณธ์ ์ธ bound ์›์ ์€ (0, 0)์ด๊ณ , size๋Š” frame ํ”„๋กœํผํ‹ฐ์— ์žˆ๋Š” ์‚ฌ๊ฐํ˜•์˜ size์™€ ๋™์ผํ•˜๋‹ค. ์ด ์‚ฌ๊ฐํ˜•์˜ size ๋ณ€ํ™”๋Š” center point๋ฅผ ๊ธฐ์ค€์œผ..

iOS 2023.06.30

[ iOS/Rx ] 1. RxSwift๋ž€?

๐Ÿงš๐Ÿป‍โ™€๏ธ์š”์•ฝ๐Ÿงš๐Ÿป‍โ™€๏ธ Rx๋Š” Observable ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋˜๋Š” ๋น„๋™๊ธฐ์  ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์‚ฌ์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค. ๊ทธ๊ฒƒ์ด ๊ธฐ๋ฐ˜์ด ๋˜์–ด Swift ์ „์šฉ์œผ๋กœ ๊ตฌํ˜„๋œ ๊ฒƒ์ด ๋ฐ”๋กœ RxSwift์ด๋‹ค. Rx๋Š” ๋น„๋™๊ธฐ์  ์ž‘์—…๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ตฌ์„ฑ์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด์ž ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๋˜์–ด์žˆ๋‹ค. ์ „๋‹ฌ๋˜๋Š” ์ด๋ฒคํŠธ์— ๋ฐ”๋กœ ๋ฐ˜์‘ํ•˜์—ฌ ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง„๋‹ค. Reactive ๊ตฌ์„ฑ ์š”์†Œ๋กœ๋Š” Observable(๊ด€์ฐฐ๋Œ€์ƒ), Operator(์—ฐ์‚ฐ์ž), Observer(๊ด€์ฐฐ์ž)๊ฐ€ ์žˆ์œผ๋ฉฐ, ๊ด€์ฐฐ์ž๊ฐ€ ๊ด€์ฐฐ๋Œ€์ƒ์„ ๊ตฌ๋…(Subscribe)ํ•ด์•ผ๋งŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ ํ๋ฆ„๋“ค์ด ์ด๋ฒคํŠธ์— ๋‹ด๊ฒจ Observable์—์„œ ์‹œ์ž‘ํ•ด Operator์„ ๊ฑฐ์ณ Observer์—๊ฒŒ ๋„๋‹ฌํ•œ๋‹ค. ๋น„๋™๊ธฐ ์ž‘์—… Rx์— ๋Œ€ํ•ด ์•Œ๊ธฐ ์ „ ..

iOS/Rx 2023.06.27

[ iOS ] ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ / ์ง๋ ฌ๊ณผ ๋™์‹œ์„ฑ

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

iOS 2023.06.22

[ iOS ] CollectionView์˜ Section ์ˆจ๊ธฐ๊ธฐ - CompositionalLayout

CollectionView์˜ Section CollectionView๋Š” ์—ฌ๋Ÿฌ Section์„ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ๋Š” App Store์ด๋‹ค. ์•„๋ž˜ ์‚ฌ์ง„์„ ๋ณด๋ฉด ์•„๋ž˜๋กœ๋„ ์Šคํฌ๋กค์ด ๋˜๋ฉฐ ์—ฌ๋Ÿฌ ๋‹จ๋ฝ์œผ๋กœ ๋‚ด์šฉ์ด ๋‚˜๋‰˜์–ด์ ธ ์žˆ๊ณ  ๊ฐ ๋‹จ๋ฝ์ด ๊ฐ€๋กœ๋กœ ์Šคํฌ๋กค์ด ๋˜์–ด ์—ฌ๋Ÿฌ ์•„์ดํ…œ๋“ค์„ ๋ณด์—ฌ์ค€๋‹ค. ์•ฑ์Šคํ† ์–ด์ฒ˜๋Ÿผ ํ•ญ์ƒ collectionView์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ ๋ฉ”๋ชจ, ๋‹ค์ด์–ด๋ฆฌ๋ฅผ ์ €์žฅ ๋ชฉ์  CollectionView๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ ์ „์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ์‚ญ์ œํ•œ ๊ฒฝ์šฐ์—๋Š” CollectionView๊ฐ€ ๋ฐ์ดํ„ฐ ์—†์ด ๋นˆ ๊ณต๊ฐ„์œผ๋กœ ์žˆ์–ด์•ผ ํ•œ๋‹ค. Section์ด ํ•˜๋‚˜๊ฑฐ๋‚˜ ๋งˆ์ง€๋ง‰ Section์ด๋ผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋”๋ผ๋„ ๋ฌธ์ œ๋˜์ง€ ์•Š์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ ๋˜๋Š” ์ค‘๊ฐ„ Section์ด๋ผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋‹ค์Œ Section๊นŒ์ง€ ๊ทธ์ € ํ……..

iOS 2023.03.06

[ iOS ์‹œํ–‰์ฐฉ์˜ค ] CollectionView์˜ Section ์ˆจ๊ธฐ๊ธฐ -CompositionalLayout

๐Ÿ‘ฉ‍๐Ÿ’ป๋ฐฐ๊ฒฝ๐Ÿ‘ฉ‍๐Ÿ’ป ์›๋ž˜ Section์ด ํ•œ ๊ฐœ์˜€๋˜ collection view๋ฅผ ๋‘ ๊ฐœ๋กœ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ์•„์ดํ…œ์ด ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋ฉด ๊ทธ๋ƒฅ ํ……- ๋นˆ ๊ณต๊ฐ„์ด ๋‚จ๊ฒŒ ๋˜์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ข‹์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•„ ์•„์ดํ…œ์ด ์—†์„ ๊ฒฝ์šฐ Section์„ ์ˆจ๊ธฐ๊ณ ์ž ๊ณ„ํšํ–ˆ๋‹ค. How to deal with empty items section Section์„ ์ ‘๋Š” ๊ฑด ์ž์ฃผ ๋ณด์ด๋Š” ๊ธฐ๋Šฅ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋‚˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ์ง€ ์•Š์„๊นŒ ๊ณต์‹๋ฌธ์„œ์„ ์—ด์‹ฌํžˆ ์ฐพ์•„๋ณด์•˜์ง€๋งŒ ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์‹œ ๋˜ ์—ด์‹ฌํžˆ ๊ตฌ๊ธ€๋ง์„ ํ–ˆ๋‹ค. ๋‚ด๊ฐ€ ์ž์ฃผ ๋ดค๋˜ Section ์ˆจ๊น€ ๊ธฐ๋Šฅ์€ ๋ณดํ†ต TableView๋ฅผ ํ™œ์šฉํ•œ ๊ฒƒ์ด๊ฑฐ๋‚˜ FlowLayout์„ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์ด์—ˆ๋Š”๋ฐ, ๋‚˜๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ Section์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค ๊ณ„ํš์ด..

[ iOS ์‹œํ–‰์ฐฉ์˜ค ] CollectionView ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ (Performing reloadData as a fallback — Invalid update)

๐Ÿ‘ฉ‍๐Ÿ’ป๋ฐฐ๊ฒฝ๐Ÿ‘ฉ‍๐Ÿ’ป CollectionView๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด cell ์‚ญ์ œ, ์ถ”๊ฐ€, ๋ณ€๊ฒฝ ๋“ฑ ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋•Œ reloadData, reloadSection, deletedItem, insertItem ๋“ฑ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๊ด€๋ จํ•˜์—ฌ CollectionView์˜ ๋ ˆ์ด์•„์›ƒ์„ ์—…๋ฐ์ดํŠธํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์œ ํšจํ•˜์ง€ ์•Š์€ ์—…๋ฐ์ดํŠธ [UICollectionView] Performing reloadData as a fallback — Invalid update: invalid number of items in section 0. ... deleteItem ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด CollectionView๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค ํ•˜๋Š”๋ฐ ์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  collectionView์— ์–ด๋– ํ•œ ๋ณ€ํ™”๋„ ์—†์—ˆ๋‹ค..

[ iOS ] ScrollView ํ™”๋ฉด ์บก์ณํ•˜๊ธฐ (Image Creation)

๋ฌธ์ œ๋ฌด๋‹ค, ๊พธ์ฃผ๋‹ˆ ๋“ฑ ๋ช‡๋ช‡ ์•ฑ๋“ค์€ ํ™”๋ฉด์„ ์บก์ณํ•œ ๋“ฏ ์ด๋ฏธ์ง€ํ™”ํ•ด ์ €์žฅ ๋˜๋Š” ๊ณต์œ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์˜ค๋Š˜์€ ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์˜ˆ์ •์ธ๋ฐ, ํ™”๋ฉด ์บก์ณ์—์„œ ๋” ๋‚˜์•„๊ฐ€ ํ™”๋ฉด ๋ฐ– ์•„๋ž˜๋กœ ๋‚ด์šฉ์ด ๊ณ„์† ์ด์–ด์ง€๋Š” ScrollView์˜ ์ „์ฒด ํ™”๋ฉด์„ ์บก์ณํ•˜๋Š”, ์ฆ‰ ์ด๋ฏธ์ง€ํ™”ํ•˜๋Š” ์ž‘์—…์„ ์ •๋ฆฌํ•  ๊ฒƒ์ด๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์—ฌ UIActivityViewController๋ฅผ ์‚ฌ์šฉํ•ด ์ด๋ฏธ์ง€๋ฅผ ์ธ์Šคํƒ€๊ทธ๋žจ์— ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. UIGrapics~UIKit์—๋Š” Image์™€ PDF ์„ ์ƒ์„ฑํ•˜๊ณ  Drawing ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์™€ ํ•จ์ˆ˜๋“ค์„ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฒˆ์— ์•Œ์•„๋ณผ ํ•จ์ˆ˜๋Š” Image์™€ PDF์˜ Image Creation ํŒŒํŠธ์— ๋‚˜์˜ค๋Š” ํ•จ์ˆ˜ ์ค‘ ์•„๋ž˜ 3๊ฐœ์™€ Drawing์˜ Shadows/Graphics Context Promitives์˜ ํ•จ์ˆ˜..

iOS 2023.02.18

[ iOS/Git ์‹œํ–‰์ฐฉ์˜ค ] Push๋œ Info.plist๋ฅผ .gitignore์— ํ• ๋‹นํ•˜๊ธฐ

๐Ÿ‘ฉ‍๐Ÿ’ป๋ฐฐ๊ฒฝ๐Ÿ‘ฉ‍๐Ÿ’ป ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋ฉด ํ† ํฐ ๋“ฑ ๊ฐœ์ธ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. Local ์ €์žฅ์†Œ์—์„œ๋งŒ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ์— ๋Œ€ํ•ด ํฌ๊ฒŒ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ, Github๊ณผ ๊ฐ™์€ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋งŒ์•ฝ ๋ฏธ์ฒ˜ ์‹ ๊ฒฝ ์“ฐ์ง€ ๋ชปํ•˜๊ณ  ๊ฐœ์ธ ์ •๋ณด๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์˜ฌ๋ฆฌ๊ฒŒ ๋œ๋‹ค๋ฉด ํ•ดํ‚น์˜ ๋Œ€์ƒ์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  bundle์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋„ ๊น”๋”ํ•ด์ง€๊ณ  ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ๋„ ํŽธ๋ฆฌํ•ด์„œ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒˆ๋“ค๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ์ข‹๋‹ค. ์ด์™€ ๊ฐ™์€ ์ด์œ ๋กœ ์ค‘์š”ํ•œ ์ •๋ณด๋“ค์„ Info.plist ๋„ฃ๊ณ  ์ด plist ํŒŒ์ผ์„ .gitignore์— ์ถ”๊ฐ€ํ•˜๋ ค ํ–ˆ๋‹ค .gitignore์— ํŒŒ์ผ ์ถ”๊ฐ€ํ•˜๊ธฐ .gitignore์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ •๋ง ๊ฐ„๋‹จํ•˜๋‹ค. .gitignore ํŒŒ์ผ์„ ์—ด๊ณ  ์›ํ•˜๋Š”..

[ iOS ] UserDefaults - ์ปค์Šคํ…€ ํƒ€์ž… ์ €์žฅํ•˜๊ธฐ (Attempt to insert non-property list object ์˜ค๋ฅ˜)

UserDefaults์™€ non-property list ์˜ค๋ฅ˜ UserDefaults๋Š” Float, Double, Int, URL ๋“ฑ ๊ธฐ๋ณธ ํƒ€์ž…์— ๋Œ€ํ•œ ํŽธ๋ฆฌํ•œ ๋ฉ”์„œ๋“œ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary ํƒ€์ž…์ด๋ผ๋ฉด UserDefaults์— ์ž์œ ๋กญ๊ฒŒ ์ €์žฅ ๋ฐ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ์—๋Š” ๋ณดํ†ต ์•„๋ž˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ์ปค์Šคํ…€ํ•œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค. struct User { let name: String let age: String } ์ด ์ปค์Šคํ…€ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด UserDefaults์— ์ €์žฅํ•ด๋ณด์ž. let user = User(name: "์‚ฌ์šฉ์ž", age: "12") Userdeafaults.standard.se..

iOS 2023.01.21

[ iOS ] Property list

Property list property list๋Š” ๊ฐ์ฒด ์ง๋ ฌํ™”๋ฅผ ์œ„ํ•œ ํŒŒ์ผ์ด๋‹ค. plist๋ผ๋Š” ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง€๋ฉฐ ์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” info.plist๊ฐ€ ๋ฐ”๋กœ property list์ด๋‹ค. property list๋Š” ์šฉ๋Ÿ‰์ด ์ž‘๊ณ  ์ƒ์„ฑํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ serialization ์ž‘์—…์ด ์šฉ์ดํ•˜๋‹ค. Cocoa Foundation๊ณผ Core Foundation์€ property list๋ฅผ serializarionํ•˜๊ณ  deserializationํ•˜๋Š”๋ฐ ๊ด€๋ จํ•œ APIs์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. Property list : dictionaries, arrays, strings, numbers (integer and float), dates, binary data, and Boolean values + [ Swift ] Serializati..

iOS 2023.01.20
728x90