[Design Pattern] Coordinator - Refactoring
2025. 1. 17. 15:55
iOS/Pattern
기존 Coordinator에서는 몇 가지 문제점들과 불편한 점들을 겪고 이들을 리팩토링의 필요성을 느꼈다. 이전 버전의 Coordinator는 여기서 확인해볼 수 있다. https://seokyoungg.tistory.com/100 [Design Pattern] Coordinator 패턴"Coordinator패턴"은 ViewController로부터 화면 전환의 부담을 줄여주기 위한 패턴이다. 이를 통해ViewController 간의 결합도를 낮춰주게 된다. 만약 ViewController에서 다음과 같이 화면 전환 로직을 담seokyoungg.tistory.com 결과물을 SPM을 통해 배포했기 때문에, 사용법 및 코드들은 아래서 확인해 볼 수 있다. https://github.com/jungseok..
[iOS] Custom 영상길이 조절 SliderBar 구현하기
2024. 12. 14. 01:07
iOS/iOS
이번 포스팅에선 아래와 같이 iPhone에서 제공하는 SliderBar를 직접 구현해보자! 자세한 것은 해당 링크에서 확인해볼 수 있습니다.https://github.com/jungseokyoung-cloud/VideoTrimmingSliderBar GitHub - jungseokyoung-cloud/VideoTrimmingSliderBarContribute to jungseokyoung-cloud/VideoTrimmingSliderBar development by creating an account on GitHub.github.com 우선, 해당 VideoTrimmingSliderBar를 State를 정의할 수도 있고, send-Action을 활용할 수 있어, UIControl로 구현해주었다.fin..
[Design Pattern] Coordinator 패턴
2024. 5. 26. 22:34
iOS/Pattern
"Coordinator패턴"은 ViewController로부터 화면 전환의 부담을 줄여주기 위한 패턴이다. 이를 통해ViewController 간의 결합도를 낮춰주게 된다. 만약 ViewController에서 다음과 같이 화면 전환 로직을 담당하게 되면,ViewController는 자신의 이후에 올 ViewController가 무엇인지 알아야 한다. @objc didTapButton() { let vc = ViewController() self.pushViewController(vc, animated: true)} 이는, ViewController에서 다음 ViewController를 위한 의존성 생성도 담당해야 하는데, 특히나, MVVM 아키텍처 채턴의 경우, ViewController는 다음과..
[iOS] Custom Calendar 구현(2)
2024. 5. 15. 23:17
iOS/iOS
저번 포스팅에서 구현했던 Custom Calendar를 Single Selection을 지원하도록 구현해 보자. 자세한 구현은 여기에서 확인해볼 수 있다. https://github.com/jungseokyoung-cloud/iOS-Study/tree/main/Custom%20Calendar iOS-Study/Custom Calendar at main · jungseokyoung-cloud/iOS-StudyiOS Study Archive. Contribute to jungseokyoung-cloud/iOS-Study development by creating an account on GitHub.github.com 우선 이를 구현하기 앞서 고려해야 할 부분들이 있다. 하나의 Selection만을 지원한..
[iOS] Custom Calendar 구현(1) - UI 및 달력 데이터
2024. 5. 15. 23:17
iOS/iOS
이번 포스팅에선 다음과 같이 날짜의 선택이 가능한 Custom Calendar를 구현해 보자. 전체 코드는 여기에서 확인해볼 수 있다. https://github.com/jungseokyoung-cloud/iOS-Study/tree/main/Custom%20Calendar iOS-Study/Custom Calendar at main · jungseokyoung-cloud/iOS-StudyiOS Study Archive. Contribute to jungseokyoung-cloud/iOS-Study development by creating an account on GitHub.github.com Month CollectionView우선, 하나의 달만 표시하는 View부터 만들어보자. 여기서 각 달..
[iOS] Custom Drop Down (2) - firstResponder 활용해 리팩토링하기
2024. 3. 27. 15:04
iOS/iOS
이전 포스팅에선, Custom DropDown을 구현했었다. 우선, DropDownView를 살펴보면 다음과 같다. "AnchorView를 터치"하게 되면 DropDownView는 TableView를 display 한다. "TableView에서 옵션을 선택"하거나, "외부 영역을 터치"하면 TableView를 hide 한다. 기존의 로직에선, ViewController가 터치 이벤트의 발생한 영역을 다음과 같이 판단했어야 했다. /// ViewController override func touchesBegan(_ touches: Set, with event: UIEvent?) { super.touchesBegan(touches, with: event) guard let touch = touches.fi..
[iOS] Core Animation(1) - Concept
2024. 3. 5. 16:16
iOS/iOS
"Core Animation"은 iOS 혹은 OS X환경에서 Grapic Rendering 및 Animation Infra로, View 혹은 여러 Element들을 Animating하는데 사용한다. 쉽게 말해 "Core Animation"은 View를 Drawing하는 Framework이다. "Core Graphics"도 View를 Drawing하는 API이지만, CPU에서 그리는 반면 "Core Animation"은 GPU에서 View를 Drawing한다. Swift에서 일어나는 Animation의 경우, 만화처럼 Frame을 빠르게 교체해 실제로 연속적으로 일어난 것처럼 보이게 하는 것이다. 이렇게 1초에 몇 개의 Frame을 표시할 수 있는 지를 "refresh rate"(주사율)로 표현하며, 단위..
[iOS] Render Loop & Hitch(2)
2024. 2. 24. 18:31
iOS/iOS
Hitch는 Render Loop에서 제시간에 Frame을 준비하지 못했을 때 발생한다. 이러한 Hitch는 어떤 Stage에서 발생했냐에 따라, Commit Hitch, Render Hitch로 구분된다. Commit Hitches "Commit Phase"는 UI를 변경하고 업데이트된 UI Layer Tree를 Render server로 제출한다. 이때 Render Server로 제출되는 결과물을 "Commit"이라 부른다. 다음과 같이 "Event Phase"에서 touch이벤트를 통해 backgroundColor와 frame을 변경했다고 가정하자. 다음과 같이 시스템은 display 혹은 layout이 필요하다고 마킹을 하게 된다. 이후 "Commit Phase"에서 시스템에 의해 각 draw(r..
[iOS] Render Loop & Hitch(1)
2024. 2. 22. 01:05
iOS/iOS
App에서 화면 스크롤, Pop Up 등 여러 Animation이 존재한다. 이러한 Animation은 유저의 터치와 같은 이벤트에 의해서 발생하는데, App은 이러한 유저의 이벤트를 통해 변경된 UI를 화면에 Display 하는 과정을 Render Loop이라 부른다. Hitch Render Loop의 각 Cycle에서 만들어지는 화면을 "Frame"이라 부른다. Swift에서 일어나는 Animation의 경우, 만화처럼 Frame을 빠르게 교체해 실제로 연속적으로 일어난것 처럼 보이게 하는 것이다. 만약 Frame이 제때 만들어지지 않는다면 제시간에 교체하지 못하게 되어 사용자에게 버벅거리게 보일 것이다. 이처럼 다음 Frame이 늦어져, 애니메이션이 끊기는 시간을 "Hitch"라고 부른다. 이때, ..
[iOS] Custom Drop Down
2023. 10. 31. 00:18
iOS/iOS
이번 포스팅에선 다음과 같은 DropDown View를 구현해 보자.이후, UIResponder의 firstResponder를 활용해 리팩토링했습니다. 리팩토링한 포스팅을 아래 링크에 있습니다. https://seokyoungg.tistory.com/85 [iOS] Custom Drop Down (2) - firstResponder 활용해 리팩토링하기이전 포스팅에선, Custom DropDown을 구현했었다. 우선, DropDownView를 살펴보면 다음과 같다. "AnchorView를 터치"하게 되면 DropDownView는 TableView를 display 한다. "TableView에서 옵션을 선택"하거나, "외부 영역seokyoungg.tistory.com 전체 코드는 여기에서 확인해 볼 수 있..
[iOS] LocalDB(3) - Core Data CRUD
2023. 10. 25. 17:11
iOS/iOS
"Core Data"는 Database가 아니라 Object Graph Management이다. Core Data는 다양한 기능들을 제공하는데, 제공하는 기능에는 Persistent, Change Tracking과 같은 기능들이 있다. 즉, Persistent는 제공하는 기능 중 하나일 뿐이지, Core Data는 Database가 아니다. 해당 블로그에서 사용하는 예시는 아래 링크에서 자세하기 볼 수 있다. https://github.com/jungseokyoung-cloud/iOS-Study/tree/main/CoreData-Demo Core Data Model Core Data를 사용하기 위해선, App의 Object구조를 정의하는 "Core Data Model File"을 생성해야 한다. "Cor..
[iOS] Local DB(2) - Core Data Concept
2023. 10. 9. 21:27
iOS/iOS
지난 포스팅에서 알아본 UserDefaults, Keychain은 큰 데이터를 저장하기에는 적합하지 않다."UserDefaults"는 Memory에 캐싱하기 때문에 메모리 부족으로 이어질 수 있고, "Keychain"의 경우에는 Apple에서 민감한 데이터를 위해 제공하기 때문에 적합하지 않다. 이번 포스팅에선, 좀 더 큰 데이터를 저장하기 적합한 Core Data에 대해서 알아보자. Core Data "Core Data"는 Application의 Model Layer의 객체를 관리하는 Framework다.정확히 말하자면, Core Data는 Database가 아니고, Object Graph Manager이다. Object Graph ManagerObject Graph란, 말 그대로 Object간의 관..