Toy Project/Apple Music (iOS)

3. Home View

개발자킹콩 2021. 2. 15. 20:11

Home 화면

 

 

 

 

우선 셀 사이즈를 계산해서 넣어주면 다음과 같은 화면이 나온다.

 

 

이상하네? 우리는 마진을 생각해서 셀크기를 계산 하였다. 그런데 우리는 margin을 지정해주지 않았다!!

우리는 셀 사이즈를 생각해서 아이템간의 거리, margin을 계산해서 셀의 크기를 만들었지만 실제로는 margin이 적용되어 있지않다. 적용하러 가보자

 

 

 

 

collectionView에서 size inspector을 살펴보면 실제 margin을 줄 수 있는 부분이 존재하며 이는 section Insets이다. margin 넣으니깐 훨씬 보기좋다ㅎㅎ

 

 

 

 

 


 

 

 

 

AVPlayer!!

 

 

 

AVFoundation: 음악 재생관 관련된 아이템들이 존재하는 공구함 (프레임워크다)

AVPlayer는 실제 재생시키는 객체

AVPlayerItem은 실제 재생시키는 객체에 의해 재생되는 곡(item)

 

 

 

 

 

 

쉽게 설명하면 음악을 듣기위한 모든 작업을 하려면 AVFoundation을 import해야하고,

mp3플레이어에 해당하는 것이 위의 AVPlayer객체이다.

그렇다면 안에 존재하는 곡은 AVPlayerItem이 되는 것이다.

하나하나가 AVPlayerItem이고 이를 리스트로 반환하면 전체가 가는거다~

 

 

 

 

AVPlayer가 정상적으로 노래를 재생하려면 그 곡은 AVPlayerItem 객체로 되어 있어야 한다.

AVPlayerItem의 경우 AVAsset라는 객체로 저장하거나, URL을 통해 저장을 해둔다.

여기서 url에는 local에 존재하는 주소를 넣어도 되지만 스트리밍 서비스처럼 서버에 존재하는 url을 넣어도 된다.

우리는 현재 local에 음악파일이 존재하기에 해당 url로 AVPlayerItem을 구성하고 이를 AVPlayer객체를 사용해서 노래재생을 할 것이다. 

 

 

 


 

 

 

MVVM패턴

 

 

현재 프로젝트에서 Track이 model이라면 TrackManager이 ViewModel인것이고,

데이터에 접근하려는 ViewController는 ViewModel을 통해 데이터를 받게 된다. 

우리는 HomeViewController을 살펴보면서 TrackManager에서 필요한 것들을 살펴보자

 

  1. 우선 Cell의 갯수를 파악하기 위해 TrackManager한테 track 갯수를 받아온다.

  2. 셀의 표현 부분에서는 셀의 indexPath에 해당하는 정보를 알기위해 track이 담긴 리스트반환

 

 

 

 

 

loadTrack 는 그냥 곡리스트를 반환한다.

track는 해당 indexPath에 맞는 track을 반환한다.

loadAlbums 는 곡리스트를 받아서 앨범 반환 인데.. 앨범리스트 만들려한다.

loadOtherTodaysTrack는 랜덤하게 선택하여 headerView에 띄울 것이다.

 

 

 

 

우리는 트랙이 노래 하나하나라면 앨범은 어떤 노래들이 1개 이상 존재하는, 트랙이 여러개 존재하는 묶음일 것이다.