Programming/iOS
iOS: ์คํ ๋ ์ด์์ ๊ธฐ๋ฐ ๋ทฐ์ cornerRadius ์ ์ฉํ๊ธฐ
iOS: ์คํ ๋ ์ด์์ ๊ธฐ๋ฐ ๋ทฐ์ cornerRadius ์ ์ฉํ๊ธฐ
2021.04.16private lazy var profileImageView: UIImageView = { let imageView = UIImageView() imageView.translatesAutoresizingMaskIntoConstraints = false imageView.contentMode = .scaleAspectFill imageView.layer.cornerRadius = imageView.frame.size.height * 0.5 return imageView }() ์ด๋ฏธ์ง ๋ทฐ๋ฅผ ์ด๊ธฐํํ ๋ cornerRadius ๊ฐ์ imageView.frame.size.height / 2๋ฅผ ํ๋ฉด ์ ์ฉ์ด ์๋๋ค. ์ด๊ฒ ์ ์๋๋์ง ๋ชฐ๋ผ์ ๋ค๋ฅธ ์ฝ๋์์๋ ์์๋ก ์์๋ก ์ ์ฉํ์๋ค. ๋๋ ์ด๋ฏธ์ง ๋ทฐ์ ํฌ๊ธฐ๋ฅผ ์คํ ..
iOS: Contacts ํ๋ ์์ํฌ ํบ์๋ณด๊ธฐ
iOS: Contacts ํ๋ ์์ํฌ ํบ์๋ณด๊ธฐ
2021.02.02๊ฐ์ Contacts ํ๋ ์์ํฌ ํบ์๋ณด๊ธฐ Contacts ํ๋ ์์ํฌ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ ์ฌ์ฉ์์ ์ฐ๋ฝ์ฒ๋ฅผ ๊ฐ์ ธ์์ ํ
์ด๋ธ๋ทฐ๋ฅผ ํตํด ๋ณด์ฌ์ฃผ์. ๐จ ์ฌ์ฉ์์ ์ฐ๋ฝ์ฒ๋ฅผ ๊ฐ์ ธ์์ ๋ณด์ฌ์ฃผ๊ธฐ UI ๊ตฌ์ฑํ๋ ๋ถ๋ถ์ ํจ์ค. ์ฝ๋๋ ์คํ ๋ฆฌ๋ณด๋๋ก ํ
์ด๋ธ๋ทฐ์ ์
๊ตฌ์ฑ์ ํด์ฃผ๋ฉด ๋๋ค. ์
์ ์คํ์ผ์ Subtitle๋ก ์ง์ ํด์คฌ๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ง์ด ๊ฐ์ ธ์์ ๋ณด์ฌ์ค ๊ฒ ์๋๋ผ์ ๊ฐ๋จํ๊ฒ ํ๋ค. ๊ทธ๋ค์์ผ๋ก Fetching Contacts ๋ฌธ๋จ์ ์๋ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋ฐ๋ผ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค. override func viewDidLoad() { super.viewDidLoad() self.fetchContacts() } func fetchContacts() { let store = CNContactStore() do ..
iOS: Anatomy of a Constraint
iOS: Anatomy of a Constraint
2021.02.01๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ ์ด์์์ ์ผ๋ จ์ ์ ํ ๋ฐฉ์ ์์ผ๋ก ์ ์๋๋ค. ๊ฐ ์ ์ฝ์ ๋จ์ผ ๋ฐฉ์ ์์ ๋ํ๋ธ๋ค. ์ด ์ ์ฝ ์กฐ๊ฑด์ ๋นจ๊ฐ์ ๋ทฐ์ ์ ํ ๊ฐ์ฅ์๋ฆฌ๊ฐ ํ๋์ ๋ทฐ์ ํํ ๊ฐ์ฅ์๋ฆฌ ์ดํ 8.0 ํฌ์ธํธ์ฌ์ผ ํจ์ ๋ํ๋ธ๋ค. ๋ฐฉ์ ์์๋ ์ฌ๋ฌ ๋ถ๋ถ์ด ์๋ค. Item 1 → ๋ฐฉ์ ์์ ์ฒซ๋ฒ์งธ ํญ๋ชฉ(์ด ๊ฒฝ์ฐ RedView)์ด๋ค. ํญ๋ชฉ์ ๋ทฐ ๋๋ Layout Guide ์ด์ด์ผ ํ๋ค. Attribute 1 → ์ฒซ๋ฒ์งธ ํญ๋ชฉ(์ด ๊ฒฝ์ฐ RedView์ Leading)์ ์ ํ๋ ์์ฑ์ด๋ค. Relationship → ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์ฌ์ด์ ๊ด๊ณ. ๊ด๊ณ๋ ๊ฐ์, ํฌ๊ฑฐ๋ ๊ฐ์, ์๊ฑฐ๋ ๊ฐ์์ ์ธ ๊ฐ์ง ๊ฐ ์ค ํ๋๋ฅผ ๊ฐ์ง ์ ์๋ค. ์ด ๊ฒฝ์ฐ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ด ๋์ผํ๋ค. Multiplier → Attribute 2์ ๊ฐ์ ์ด ๋ถ๋ ์์์ ์๋ฅผ ๊ณฑํ๋ค...
iOS: ์คํ ๋ ์ด์์์ ๋ํ ์ดํด
iOS: ์คํ ๋ ์ด์์์ ๋ํ ์ดํด
2021.01.24์ด ๊ธ์ Auto Layout Guide: Understanding Auto Layout ๋ฌธ์๋ฅผ ๋ฒ์ญํ ๊ธ์
๋๋ค. ํ์ต์ ์ํด ์ผ๋ถ ๋ด์ฉ์ ์ฒจ์ญํ์ฌ ์๋ฌธ๊ณผ ๋์ผํ์ง ์์ ์ ์์ต๋๋ค. ์คํ ๋ ์ด์์์ ํด๋น ๋ทฐ์ ์ ์ฉ๋ ์ ์ฝ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ์ ์๋ ๋ชจ๋ ๋ทฐ์ ํฌ๊ธฐ์ ์์น๋ฅผ ๋์ ์ผ๋ก ๊ณ์ฐํ๋ค. ์ด๋ฌํ ์ ์ฝ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ด๋ถ ๋ฐ ์ธ๋ถ ๋ณ๊ฒฝ์ ๋์ ์ผ๋ก ์๋ตํ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ ์ ์๋ค. ์ธ๋ถ ๋ณ๊ฒฝ ์ํผ ๋ทฐ์ ํฌ๊ธฐ๋ ๋ชจ์์ด ๋ณ๊ฒฝ๋๋ฉด ์ธ๋ถ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ค. ์ธ๋ถ ๋ณํ์ ์ผ๋ฐ์ ์ธ ์์ธ์ ๋ค์๊ณผ ๊ฐ๋ค. ์ฌ์ฉ์๊ฐ ์ฐฝ ํฌ๊ธฐ๋ฅผ ์กฐ์ (OS X) ์ฌ์ฉ์๊ฐ iPad (iOS)์์ Split View์ ๋ค์ด๊ฐ๊ฑฐ๋ ๋๊ฐ ๊ธฐ๊ธฐ๊ฐ ํ์ (iOS) ํตํ ํ์ฑํ ๋ฐ ์ค๋์ค ๋
น์ ๋ง๋๊ฐ ๋ํ๋๊ฑฐ๋ ์ฌ๋ผ์ง..
iOS: UserDefaults ์ฌ์ฉํ๊ธฐ
iOS: UserDefaults ์ฌ์ฉํ๊ธฐ
2020.11.28๊ฐ์ UserDefaults๋ฅผ ์ด์ฉํด์ ์ฑ์ด ์ข
๋ฃ๋ ๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ณ , ์ฑ์ด ๋ค์ ์คํ๋ ๋ ๋ง์ง๋ง ์ํ๋ฅผ ๋ณต์ํ๊ณ ์ถ์๋ค. ์ด๋ ค์ ๋ ์ [ios] userDefaults๋ฅผ ์ด์ฉํstructure ํ์
Data ์ ์ฅํ๊ธฐ why? -> ํ๋ก์ ํธ๋ฅผ ์งํํ๋์ค ๊ธฐ๋ณธ์ ์ธ user์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผํด์ userDefault๋ฅผ ํ์ฉํ๋ค.(๊ตณ์ด coreData๋ฅผ ์ด์ฉํ ์ผ์ด ์์ด์ ์ฌ์ฉํ ์ง ์์๋ค.) velog.io ์ฒ์์๋ ์ ๊ธ์ ๋ณด๊ณ PropertyListEncoder & PropertyListDecoder ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ํด๋ดค๋ค. ์๋๋ค๊ณ ์๊ฐํด์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์๋๋ฐ, ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋๋ (ํ์ธ์ ์ ํด๋ดค๋๋ฐ) ์ ์ฅ์ ๋์ง๋ง, ์ฝ์ด์ค๋ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ์์๋ ๊ฑฐ ๊ฐ๋ค. ํด๊ฒฐํ ๋ฐฉ๋ฒ scene์ ์..
iOS: Photos
iOS: Photos
2020.11.20Photos iOS ๋ฐ macOS์์ ์ฌ์ง ์ ํ๋ฆฌ์ผ์ด์
, ์ฌ์ง ํ์ฅ ๊ธฐ๋ฅ์ ์ง์ํ๋ ํด๋์ค๋ฅผ ์ ๊ณตํ๋ ํ๋ ์์ํฌ. Photos๋ฅผ ํตํด iOS ๋ฐ tvOS์์ iClud ์ฌ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ์ฌ ์ฌ์ง ๋ฐ ๋น๋์ค์ ์ง์ ์ ๊ทผ ๊ฐ๋ฅ PHPhotoLibrary ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ง ์ฝํ
์ธ ์ ์ ๊ทผ, ์์
๋ฐ ์ปฌ๋ ์
์ ๋ณ๊ฒฝํ ์ ์๋๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ์ ๊ถํ์ ์ป์. ๊ถํ์ ์ป์ผ๋ฉด ์ฌ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ ๋ฌ๋ฐ์ ์ ์์ PHPhotoLibrary: ์ฌ์ฉ์์ ์ฌ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ ๊ทผ ๋ฐ ๋ณ๊ฒฝ์ ๊ด๋ฆฌํ๋ ๊ณต์ ๊ฐ์ฒด ๋ฒ์ฃผ Collection List(์จ๋ฒ ํด๋, ํน๋ณํ ์๊ฐ) > Asset Collection(์จ๋ฒ, ํน๋ณํ ์๊ฐ) > Asset(์ด๋ฏธ์ง, ๋น๋์ค, ๋ผ์ด๋ธ ํฌํ ) ๊ฐ์ฒด ๊ฐ์ ธ์ค๊ธฐ C..
iOS: ํ ์ด ํ๋ก์ ํธ ํ๋ฉด์ ์๊ฒ๋ ์
iOS: ํ ์ด ํ๋ก์ ํธ ํ๋ฉด์ ์๊ฒ๋ ์
2020.11.18Storyboard Reference ์ธ ๋ช
์ด์ ์์
์ ํ๊ณ , ์ฒ์์๋ ์คํ ๋ฆฌ๋ณด๋๋ฅผ ์ ์ฐ๊ณ ์ ๋ถ ์ฝ๋๋ก ์์ฑํ๊ธฐ๋ก ํ๋๋ฐ, ์ค๊ฐ์ ์คํ ๋ฆฌ๋ณด๋๋ ์ฐ๊ฒ ๋์๋ค. ์ธ ์ฌ๋์ ์ฐ๊ณ , ์ ์ธ ์ฌ๋์ ์ ์ฐ๋ ์ํฉ์ด ๋์๋ค. ์๋ก์ ์คํ ๋ฆฌ๋ณด๋๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ธฐ ์ํด์ ์ด๋ค ์์ผ๋ก ๋๋์๋๋ฉด, 1. ๊ธฐ๋ฅ๋ณ ๊ทธ๋ฃน์ ๋ง๋ ๋ค. 2. ๊ฐ ๊ธฐ๋ฅ๋ณ ์คํ ๋ฆฌ๋ณด๋๋ฅผ ๋ง๋ ๋ค. 3. ๊ธฐ๋ฅ๋ณ ์คํ ๋ฆฌ๋ณด๋๋ฅผ main.storyboard์์ Storyboard Reference๋ฅผ ์ฌ์ฉํด์ ์ฐ๊ฒฐํ๋ค. + ํญ ๋ฐ์ ๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ ๋ ๋ค ์ฌ์ฉํ์ main.storyboard์ ํ ๋ฒ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ๋ฆ์ ์ฐ๊ฒฐํด๋์ผ๋๊น ๋ณด๊ธฐ์๋ ์ข๊ณ , ์คํ ๋ฆฌ๋ณด๋ ์ถฉ๋ ๋ ์ผ๋ ์์ด์ ์ข์๋ค. ์ฝ๋๋ก ์คํฌ๋กค๋ทฐ ๋ง๋ค๊ธฐ ๊ฐ์ด ํ๋ก์ ํธ๋ฅผ ์งํํ ํํ๋์ด ์๋ ค์ฃผ์ ์ ํ๋ธ..
iOS: ํ
์ด๋ธ๋ทฐ ์
ํฐ์น ํ, ๋ค๋ฅธ ๋ทฐ๋ก ์ด๋ํ ๋ค์ ๋ค์ ๋์์์ ๋ ํฌ์ปค์ค ์์ ๊ธฐ
iOS: ํ ์ด๋ธ๋ทฐ ์ ํฐ์น ํ, ๋ค๋ฅธ ๋ทฐ๋ก ์ด๋ํ ๋ค์ ๋ค์ ๋์์์ ๋ ํฌ์ปค์ค ์์ ๊ธฐ
2020.09.15์
์ ์ ํํด์ ๋ ๋ฒ์งธ ๋ทฐ๋ก ์ด๋ํ๋ค๊ฐ ๋ค์ ์ฒซ ๋ฒ์งธ ๋ทฐ๋ก ๋์์๋ ์
์ ํฌ์ปค์ค๊ฐ ๋จ์์๋ค. ์ฒ์์๋ ์๋์ ๊ธ์ ์ฐธ๊ณ ํ์ฌ ์ธํฐํ์ด์ค ๋น๋์ Selection ์ต์
์ None์ผ๋ก ๋ฐ๊พธ์ด์คฌ์๋๋ฐ, ์ด๋ฌ๋ฉด ์ด๋ ํ์ ๋์์๋ ํฌ์ปค์ค๊ฐ ๋จ์์์ง ์์ง๋ง, ๋ฌธ์ ๋ ํฐ์นํ ๋๋ ์์์ด ๋ณํ์ง ์๋๋ค๋ ๊ฑฐ๋ค. ์ด๊ฑด UX ์ธก๋ฉด์์ ์ ํฉํ์ง ๋ชปํ๋ค๊ณ ํ๋จํด์, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์๋ดค๋ค. iOS: ํ
์ด๋ธ๋ทฐ ์
ํฐ์น ์ ํฌ์ปค์ค ๋จ๊ธฐ์ง ์๊ธฐ (TableViewCell SelectionStyle) ๋ฐ์์ผ: 2016.03.23 ํค์๋: UITableViewCell, Selection, selectionStyle ๋ฌธ์ : ํ
์ด๋ธ๋ทฐ์ ์
ํฐ์น ์, ํฌ์ปค์ค๋๋ฉด์ ๋ฐฐ๊ฒฝ์ด ํ์์ผ๋ก ์ค์ ๋๋ค. ๋ฐฐ๊ฒฝ๊ณผ ๋์ผํ ์ปฌ๋ฌ์ View๋ ๋ณด์ด์ง ์๊ฒ ๋๋๋ผ..
iOS: TableView.reloadSections(_:with:)
iOS: TableView.reloadSections(_:with:)
2020.09.14TableView.reloadSections(\_ sections: IndexSet, with animation: UITableView.RowAnimation) ํน์ ์น์
์ ๋ฐ์ดํฐ๋ฅผ Reloadํ๋ ๋ฉ์๋ sections์ ๋ค์ด๊ฐ๋ ๋งค๊ฐ๋ณ์๋ ๋ฒ์๋ฅผ ๋ํ๋๋๋ฐ, ๋ง์ฝ ์ฒซ๋ฒ์งธ ์น์
๋ง Reload ํ๊ณ ์ถ๋ค๋ฉด, TableView.reloadSections(IndexSet(0...0), with: .automatic) ๋ฒ์๋ฅผ 0๋ถํฐ 0๊น์ง ํฌํจ์ผ๋ก ์ค์ ํด์ฃผ๋ฉด ๋๋ค. ์ฒซ๋ฒ์งธ๋ถํฐ ๋๋ฒ์งธ ์น์
๊น์ง Reload ํ๊ณ ์ถ๋ค๋ฉด, TableView.reloadSections(IndexSet(0...1), with: .automatic) StartIndex...EndIndexํํ๋ก ์์ฑํด์ฃผ๋ฉด ๋๋ค. ...์ ์ฌ์ฉํ ๊ฒฝ์ฐ E..