Skip to content

아쉬운 점 / 만족스러운 점 #21

@oliver-or-not

Description

@oliver-or-not

아쉬운 점

화면별로 뷰모델을 따로 두어서 클릭휠이 어떤 동작을 하는지를 화면마다 별도의 함수를 두어 관리했으면 구현이 더 쉬웠을 것이다. 지금은 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에서 뷰로 그렸다. 기능이 한정된 그리기 도구지만 실제 아이팟과 충분히 비슷하다고 느껴져서 만족한다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions