Toy Project/Apple Music (iOS)

8. Player View

개발자킹콩 2021. 2. 22. 23:55

Player View

 

 

Player View에서 필요한 것: Thumbnail, Title, Artist, 재생 관련 정보

 

 

 

 

 

우선 Player에 Storyboard를 생성하고 ViewController을 Storyboard에 띄우자

그리고 PlayerViewController을 만들어서 View 와 code를 연결하자

 

 

 

 

 


 

Auto layout

 

 

 

 

 

이제 위의 형식에 맞게 View Conponents를 추가하자. 그리고 auto layout을 지정해보자.

Auto layout은 이제 알아서 할때 됐지~

 

 

 

 


 

PlayerViewController

 

 

 

이제 PlayerViewController에서 View components를 연결해보자

 

 

 

우리는 현재 Home Storyboard와 Play Storyboard를 Segue로 연결하지 않고 따로 만들고 있다.

여러 협업과정에서 하나의 View안에 여러 ViewController를 작업할 경우 conflict이 발생하는 경우가 생긴다.

그리고 Segue를 남발하면 그것또한 conflict이 발생하는 부분이 생긴다.

그렇기에 최대한 잘게 쪼개는 방법을 사용하기를 권장한다.

 

 

 

 


 

 

 

SimplePlayer

 

 

이제 우리는 SimplePlayer를 만들고 그 안에 AVPlayer라는 녀석을 통해 곡 재생을 할 것이다.

사용할 메소드는 다음과 같다.

 

 

 

AVPlayer를 생각해보면 

앱 내에서 1개만 필요하다(굳이 여러개 만들필요없이 player에서 사용할 item을 교체하면 되니깐)

앱 전반에 걸쳐 여기저기 호출된다.

 

—> 앱 내에서 1개만 필요하고, 필요할때마다 여기저기서 호출되는 사용되는 녀석을 싱글톤 객체(Singleton object)라고 한다.

SimplePlayer도 싱글톤 객체로 만들려고 한다.

 

Singleton object를 만들려면 static 키워드가 필요하다

 

 

다음과 같이 선언하면 SimpleLPlayer은 Singleton object가 된 것이고, 아래와 같이 여기저기서 사용이 가능하게 된다.

 

기존에 알고 있는 c++의 static object를 개념으로 비추어 보면 static로 선언하게 되면 전처리 이후 main()이 실행되기 전 패치과정에서 static는 전역변수와 같이 메모리에 우선적으로 load된다. 지역 내에서만 유효한 변수가 아니기에 여기저기서 아래와 같이 변수에 접근하게 되면 그 값은 모든 접근하는 지역에서의 유효한 값변경이 이루어지는 변수가 된다.

 

 

 

 

 

 

 

 

이것과 비슷한 개념이 존재한다.

우리는 앱을 만들고 있는데 앱을 대변하는 객체가 존재한다. —> UIApplication

우리가 앱을 만들때 앱을 대변하는 객체는 1개만 있으면 된다.

우리가 만든 어플리케이션의 정보를 알때 사용을 한다.

 

 

 

이것과 마찬가지로 Player는 하나만 만들어서 돌려쓰면 되기 때문에 Singleton object로 선언한 것이다.

 

 

 

 

 


 

 

 

 

method 구현

 

 

 

 

 

 

Property 구현

 

 

 

 

 

 

설명

 

currentTime 와 totalDurationTime는 CMTime이므로 seconds로부터 type casting을 한 것이다.

 

 

 

 

 

우선 isPlaying을 살펴보면 이전에 Extension+AVPlayerItem에서 다음과 같이 compute property를 extension하였다.

 

 

 

 

 

 

 

 

이렇게 property와 method를 구현하였기에 아래와 같이 Stored property를 선언하게 되면 어디서든 SimplePlayer를 불러올 수 있고 한개만 만든 AVPlayer()를 사용할 수 있는 것이다.