-
Notifications
You must be signed in to change notification settings - Fork 0
Description
아쉬운 점
화면별로 뷰모델을 따로 두어서 클릭휠이 어떤 동작을 하는지를 화면마다 별도의 함수를 두어 관리했으면 구현이 더 쉬웠을 것이다. 지금은 PodObservable의 extension 중 제스처를 담당하는 extension에 클릭휠이 어떻게 동작하는지가 전부 다 들어있는데 케이스 분류가 너무 많아서 코드가 산만하다.
MusicKit의 특이한 타입들을 CoreData에 저장하지 못해서 아쉽다. 앱을 실행할 때 MusicKit에서 노래와 플레이리스트를 자동으로 request하게 했는데 여기서 불필요한 통신이 발생할까봐 걱정된다. 그리고 앱을 종료하고도 재생 중인 곡 리스트와 현재 곡을 남겨서 다시 불러오고 싶었는데 하지 못했다.
ListStyleBodyView, RowView를 한 가지로 통일해서 사용했다. 변수가 너무 많이 들어간다. 음악 제목을 담는 Row, 설정을 담는 Row, 그 외의 Row 등을 서로 다른 구조체로 구현하는 편이 코드가 깔끔했을 것이다.
PhotoDetail 화면이랑 VideoDetail 화면만 코드에서 화면 넘어가는 구조가 다르다. 코드 일관성이 깨졌다.
switch문과 if문으로 케이스 분류를 많이 하는 점이 이 앱의 특징이다. 케이스가 많은 코드가 눈에 잘 들어오려면 케이스 안에서의 명령이 짧아야 한다. 명령을 좀 더 묶어서 pseudo code와 같은 함수로 만들어서 코드를 작성했으면 코드가 더 읽기 좋았을 것이다. goRight(), goLeft() 메서드와 타이머 관련 메서드는 이러한 방향대로 작성해서 만족하지만 다른 명령들은 아쉽다.
뷰도 복잡한 편인데, 구조가 눈에 잘 들어오게 뷰의 구성요소는 별도의 객체 혹은 구조체로 구현하고 var body의 중괄호 안은 더 간단하게 유지하고 싶다. 지금은 몇몇 뷰는 너무 복잡해서 눈에 잘 들어오지 않는다.
같은, 혹은 거의 같은 뷰인데 이원화한 뷰가 몇 개 있다. 통합하는 편이 낫겠지만 하다보니 방치했다.
화면 전환할 때 (goLeft(), goRight()) 여러 단계를 거치는데, 그중에 현재 화면과 똑같은 화면(고스트 화면)을 그리고 현재 화면을 재빨리 대체하는 단계가 있다. 이때 opacity를 작은 값으로 주고 고스트 화면을 그리게 한 후에 opacity 역전으로 기존 화면을 대체하게 하면 버벅임의 불안 없이 여유롭게 화면을 대체할 수 있었을 것 같은데 지금 코드는 화면 대체의 과정에서 opacity를 활용하지는 않았다.
이니셜 스크롤을 구현하고 싶었는데 시간 문제로 하지 못해서 아쉽다.
SwiftUI 롱 탭 제스처의 한계와 MusicKit의 seek 기능의 부족함 때문에 좌우 버튼을 꾹 눌러 빨리감기/되감기하는 기능을 포기했다. 아쉽다.
만족스러운 점
아이팟 실물기기를 그대로 구현한다는 컨셉에 맞게, 화면에 보이는 모든 것의 크기를 아이폰의 가로 길이에 대한 상대적 값으로 선언했다. 기기 종류에 무관하게 정확한 비율을 보여주어서 만족한다.
배터리 표시, 음악 재생시간 바 등 UI에 사용된 모든 에셋은 Xcode에서 뷰로 그렸다. 기능이 한정된 그리기 도구지만 실제 아이팟과 충분히 비슷하다고 느껴져서 만족한다.