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

๐ŸŽ iOS122

[Swift] UIButton ์ˆ˜์ง์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ with Configuration ์ด๋ ‡๊ฒŒ ๊ทธ๋ฆผ๊ณผ ๊ธ€์ž๊ฐ€ ์ˆ˜์ง์œผ๋กœ ๋ฐฐ์น˜๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ๋Š”๋ฐ ์ด๋•Œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ˆ˜์ง ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค ์ถœ์ฒ˜ https://velog.io/@ezidayzi/iOS-UIButton-title-image-align-%ED%95%98%EA%B8%B0 [iOS] UIButton title , image vertical align ํ•˜๊ธฐ UIButton๋ฅผ extesionํ•ด์„œ ์•ˆ์— ๋„ฃ์–ด๋‘๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๋‹ค.๐Ÿ˜ณ velog.io extension UIButton { func alignTextBelow(spacing: CGFloat = 8.0) { guard let image = self.imageView?.image else { return } guard let titleLabel = self.titleLa.. 2022. 6. 28.
[iOS/Swift] UICollectionViewCell ์•Œ์•„๋ณด๊ธฐ ๋ณดํ˜ธ๋˜์–ด ์žˆ๋Š” ๊ธ€ ์ž…๋‹ˆ๋‹ค. 2022. 6. 27.
[iOS] Notification Service Extension์™€ Firebase ์ •๋ฆฌ UNNotificationServiceExtension ์›๊ฒฉ ํ‘ธ์‹œ ๋…ธํ‹ฐํ”ผ์ผ€์ด์…˜์˜ ์ปจํ…์ธ ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฐ์ฒด. ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜๊ธฐ ์ „์— ์ˆ˜ํ–‰๋จ class UNNotificationServiceExtension : NSObject notification service ์•ฑ ๊ธฐ๋Šฅ ํ™•์žฅ => ์‚ฌ์šฉ์ž์—๊ฒŒ remote notification ์ด ์ „๋‹ฌ๋˜๊ธฐ ์ด์ „์— ์ปจํ…์ธ ๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ UI๋ฅผ ๊ฐ€์ง€์ง€ ์•Š์Œ notification ์ด ์‚ฌ์šฉ์ž์˜ ๊ธฐ๊ธฐ์— ์ „๋‹ฌ๋˜๋ฉด ๋Ÿฐ์นญ๋จ notification ์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€, ๋น„๋””์˜ค ๋“ฑ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•”ํ˜ธํ™” ํ˜น์€ ๋ณตํ˜ธํ™”๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Œ silent notification, ์‚ฌ์šด๋“œ๋งŒ ์žฌ์ƒ์‹œํ‚ค๊ธฐ, ์•ฑ ์•„์ด์ฝ˜์— ํ‘œ์‹œ๋˜๋Š” ๋ฑƒ์ง€๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ UNNotifica.. 2022. 6. 15.
[Swift] MVVMC์˜ Coordinator ์•Œ์•„๋ณด๊ธฐ ๊ธฐ์กด MVVM์—์„œ ํ™”๋ฉด ์ „ํ™˜ ๋กœ์ง ์ฆ‰, navigation ๋กœ์ง์„ ๋งก์•„ํ•˜๋Š” Coordinator๊ฐ€ MVVMC์—์„œ ํ•ต์‹ฌ์ด์ง€ ์•Š์„๊นŒ ์‹ถ์Šต๋‹ˆ๋‹ค ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ Coordinator๊ฐ€ ๋ฌด์—‡์ด๊ณ  Child Coordinator๋Š” ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! ํ˜น์‹œ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ๊ณต์œ  ๋ถ€ํƒ๋“œ๋ ค์š”!! ๋งŒ์•ฝ MVVMC๊ฐ€ ์ฒ˜์Œ์ด๋ผ๋ฉด ์•„๋ž˜ ๊ธ€์„ ๋จผ์ € ๋ณด๊ณ  ์˜ค์‹œ๋ฉด ๋„์›€์ด ๋ ๊ฑฐ ๊ฐ™์•„์š”! 2022.06.11 - [๐ŸŽ iOS/Architecture Pattern] - [Swift] MVVMC ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ธฐ โญ๏ธ ํ™”๋ฉด ์ „ํ™˜์„ ๋‹ด๋‹นํ•˜๋Š” Coordinator ์šฐ์„  Coordinator๊ฐ€ ๋ฌด์Šจ ์—ญํ™œ์„ ํ•˜๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค! MVC ๋Š” Massive View Controller๋ผ ๋ถˆ๋ฆด ๋งŒํผ ViewController์˜ ์—ญ.. 2022. 6. 14.
[Swift] UITextField borderStyle ํ…์ŠคํŠธ ํ•„๋“œ ํ…Œ๋‘๋ฆฌ ์„ค์ • UITextField.BorderStyle UITextField์˜ ํ…Œ๋‘๋ฆฌ ์œ ํ˜•์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ none idTextField.borderStyle = .none default๋กœ .none ํƒ€์ž… ํ…Œ๋‘๋ฆฌ ์˜์—ญ์ด ์•„๋ฌด๊ฒƒ๋„ ์„ค์ • ๋˜์ง€ ์•Š์€์ฑ„ ๋‚˜ํƒ€๋‚จ line idTextField.borderStyle = .line ํ…Œ๋‘๋ฆฌ ์˜์—ญ์ด ํ•œ์ค„๋กœ ๋‚˜ํƒ€๋‚จ bazel idTextField.borderStyle = .bezel ์ž…์ฒด๊ฐ์ด ์žˆ๋Š” ๋ฒ ์ ค ์Šคํƒ€์ผ๋กœ ํ…์ŠคํŠธ ํ•„๋“œ ์˜์—ญ ํ‘œ์‹œ ์ „ํ˜•์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ์„ ๋ฐ›๋Š” ์˜์—ญ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์Šคํƒ€์ผ roundedRect idTextField.borderStyle = .roundedRect ๋ผ์šด๋“œ๋ฅผ ๊ฐ€์ง„ ๋ชจ์„œ๋ฆฌ ์Šคํƒ€์ผ๋กœ ํ…์ŠคํŠธ ํ•„๋“œ ์˜์—ญ์„ ํ‘œ์‹œํ•จ idTextField.layer.borderCol.. 2022. 6. 13.
[Swift] MVVMC ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ธฐ MVVMC ๋Š” ๊ธฐ์กด MVVM ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์— Coordinator์„ ์ถ”๊ฐ€ํ•œ ์กฐํ•ฉ MVVMC, MVVM-C, MVVM Coordinator ํŒจํ„ด์ด๋ผ๊ณ ๋„ ํ•จ MVVM์—์„œ ํ™”๋ฉด ์ „ํ™˜(navigation) ๊ธฐ๋Šฅ์„ Coordinator๊ฐ€ ๋งก์•„ ์ฒ˜๋ฆฌํ•จ MVVM ์ด ์ฒ˜์Œ์ด๋ผ๋ฉด ๐Ÿ‘‡ 2022.06.07 - [๐ŸŽ iOS/Architecture Pattern] - [Swift] MVVM ์‘์šฉํŽธ MVVM+C ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋”ฑ ์ •ํ•ด์ ธ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Coordinator ์—ญํ™œ ์•ˆ์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค์–‘ํ•˜๊ฒŒ ์กด์žฌํ•˜๋”๋ผ๊ตฌ์š” ์ƒ๊ฐ๋ณด๋‹ค ๋ณต์žกํ•œ ๋ถ€๋ถ„๋“ค์ด ๋งŽ์•„์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! ์šฐ์„  Coordinator์˜ ์—ญํ™œ ์ดํ•ดํ•˜๊ธฐ! MVVM+C ์‚ดํŽด๋ณด๊ธฐ โญ๏ธ Model ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ •์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์š”ํ•œ .. 2022. 6. 11.
[Swift] MVVM ์‘์šฉํŽธ RxSwift + MVVM์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ RxSwift๊ฐ€ ์—†๋Š” MVVM์„ ์‚ฌ์šฉํ•˜๋‹ˆ RxSwift ์˜ ์žฅ์ ์ด ํ™•์‹คํžˆ ๋Š๊ปด์ง€๋Š”๊ฑฐ ๊ฐ™์•„์š” ์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ MVVM์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด ๋‘์—ˆ๋Š”๋ฐ ๐Ÿ‘‡ 2022.06.04 - [๐ŸŽ iOS/Architecture Pattern] - [Swift/Architecture] MVVM ์ดํ•ดํ•˜๊ธฐ MVVM์€ Model - View - ViewModel๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋‹ค๊ฐ€ ์•„๋‹Œ View์™€ ViewModel์˜ ์ƒํ˜ธ ์ž‘์šฉ์— ๋Œ€ํ•ด์„œ ๋” ๊นŠ๊ฒŒ ๋‹ค๋ค„ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ์–ด์„œ ์ •๋ฆฌํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค ๐Ÿฆ‘ MVC์˜ ๋ฌธ์ œ์  ๊ธฐ์กด MVC์˜ ๊ฒฝ์šฐ Massive ViewController์˜ ์•ฝ์ž์ด๋‹ค~ ๋ผ๋Š” ๋ง์ด ์žˆ์„ ์ •๋„๋กœ ViewController์˜ ์—ญํ™œ์ด ์ปธ์Šต๋‹ˆ๋‹ค UI๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ , ๋น„์ฆˆ.. 2022. 6. 7.
[iOS/Swift] UICollectionView scroll animation ๋ณดํ˜ธ๋˜์–ด ์žˆ๋Š” ๊ธ€ ์ž…๋‹ˆ๋‹ค. 2022. 6. 6.
[iOS/Swift] UICollectionViewFlowLayout ์•Œ์•„๋ณด๊ธฐ UICollectionViewFlowLayout ๋ ˆ์ด์•„์›ƒ ์˜ค๋ธŒ์ ํŠธ UICollectionViewController์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €์— ๋„˜๊ฒจ์ฃผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ collectionViewLayout ๊ฐ’. init(collectionViewLayout: UICollectionViewLayout) ๊ฐ ์„น์…˜์˜ ํ—ค๋”์™€ ํ‘ธํ„ฐ๋ฅผ ์˜ต์…”๋„ ๊ฐ’์œผ๋กœ ํ•˜์—ฌ ๊ทธ๋ฆฌ๋“œ๋ฅผ ๊ตฌ์„ฑํ•จ @MainActor class UICollectionViewFlowLayout : UICollectionViewLayout collection view layout ํƒ€์ž… flow layout์€ collection view์˜ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์˜ค๋ธŒ์ ํŠธ์™€ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋ฉฐ ๊ฐ ์„น์…˜ ์•ˆ์— ์•„์ดํ…œ(์…€), ํ—ค๋”, ํ‘ธํ„ฐ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ™œ์„ ํ•จ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์˜ค๋ธŒ์ ํŠธ๋Š” UICollect.. 2022. 6. 6.
[Swift] MVVM ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ธฐ ์ •์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ Model, View, ViewModel๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด Model ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ •์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ structs ํ˜น์€ ์•„์ฃผ ๊ฐ„๋‹จํ•œ class๋กœ ๊ตฌํ˜„ View ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ณ  ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ๊ฒฝ์šฐ ViewModel์—๊ฒŒ ์•Œ๋ ค์คŒ UI๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์ด ์™ธ์— ViewModel์— ์žˆ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด ์žˆ์Œ ViewModel view๋กœ ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๋ฐ›๊ณ  ์ด์— ๋งž๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋จ UIKit ๋ถˆํ•„์š” ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  ๋ทฐ ์š”์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•จ model ์ •๋ณด view์— fetch ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ ๊ฐ’์„ ๋ณ€๊ฒฝ (๋ทฐ์— ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค๋Š” ๋œป) ์žฅ์  ๊ธฐ์กด MVC์—์„œ ๋งŽ์€ .. 2022. 6. 4.
[Swift/CoreAnimation] CABasicAnimation ์ด๋ž€ ์ „์ฒด ์ฝ”๋“œ ๋งํฌ ๊ณ„์ธต ์†์„ฑ์— ๋Œ€ํ•œ basic, single-keyframe ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด ๊ฐ์ฒด ์ƒ์„ฑ let animation = CABasicAnimation(keyPath: "position.x") initializer์„ ํ†ตํ•ด keyPath๋ฅผ ์ง€์ •ํ•ด์„œ ๊ฐ์ฒด ์ƒ์„ฑ let animation = CABasicAnimation() animation.keyPath = "position.x" keyPath๋Š” ๋”ฐ๋กœ ์ง€์ • ๊ฐ€๋Šฅ keyPath var keyPath: String? { get set } receiver๊ฐ€ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ•˜๋Š” ํ‚ค ํŒจ์Šค๋ฅผ ์ง€์ • -> opacity, backgroundColor, position ๋“ฑ (์™œ ์ŠคํŠธ๋ง์œผ๋กœ ๋ฐ›๋„๋ก ํ–ˆ์„๊นŒ ... ใ… ใ… ) Animatable Properties An.. 2022. 6. 2.
[iOS/Swift] UICollectionView paging ๋œ์ปฅ ๊ฑฐ๋ฆฌ๋Š” ์ด์Šˆ ์ˆ˜์ •ํ•˜๊ธฐ ์ด์ „ ํฌ์ŠคํŒ…์—์„œ Carousel effect (UICollectionViewController paging)์„ ๊ตฌํ˜„ํ–ˆ์—ˆ์ง€๋งŒ ๊ฐœ์„ ์‚ฌํ•ญ์ด ์žˆ์—ˆ์–ด์š”! ๋ฐ”๋กœ ์ฟฐ์ฒ™๊ฑฐ๋ฆฌ๋Š” ์ด์Šˆ! ํฌ์ŠคํŒ… ์ œ๋ชฉ์„ ๋ญ๋ผ ์ง€์„ ์ง€๋„ ์• ๋งคํ•œ...ใ…Žใ…Žใ…Ž ์ˆ˜์ • ์•ˆํ•˜๊ณ  ๊ทธ๋Œ€๋กœ ์“ฐ๊ธฐ์—๋Š” ๋งˆ์Œ์— ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค! ๋ฌด์กฐ๊ฑด ์‚ฌ์šฉ์ž๊ฐ€ UI/UX์— ๋ถ€๋“œ๋Ÿฌ์›€์„ ๋Š๋ผ๊ฒŒ ํ•ด์ฃผ๊ณ  ์‹ถ๋‹จ ๋ง์ด์ฅฌ ๐Ÿค” ์—ฌํ•˜ํŠผ ์ˆ˜์ •ํ•ด ๋ด…์‹œ๋‹ค ์™„์„ฑ๋œ ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ ๊นƒํ—ˆ๋ธŒ์—์„œ ๋‹ค์šด ๋ฐ›์œผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค-> ๊นƒํ—ˆ๋ธŒ๋งํฌ ์šฐ์„  ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์ž‘์„ฑํ•ด ๋‘์—ˆ๋˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์™€์„œ ๋กœ๊ทธ๋ฅผ ์œ„ํ•ด print ๋ฌธ์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOf.. 2022. 6. 1.