[iOS]<BearPlay> UIButton 기능 추가

RudinP·2024년 1월 18일
0

Projects

목록 보기
24/28


이제 뒤로가기, 재생, 앞으로가기 버튼의 동작을 구현해야한다.
또한, 노래가 재생 중일 때엔 버튼이 정지 버튼 모양으로 바뀌어야 한다.

버튼 액션 추가


Backward, Forward, PlayPause 버튼에 대한 액션을 추가해준다.

재생 버튼 구현

재생 버튼을 누르는 상황은 세 가지가 있다.
1. 현재 곡을 멈춘 상태일 때, 다시 재생 시작
2. 현재 재생 중인 곡이 없을 때, 랜덤 곡을 재생
3. 현재 재생 중인 곡이 있을 때, 곡을 멈춤

따라서 곡의 재생 유무에 따라 버튼의 isSelected의 값을 바꾸어주도록 하고, 이 변수의 참 거짓 값에 따라 구분되어 실행되도록 구현하였다.

재생중인 노래가 바뀜에 따른 NowPlayingTitle 상태 적용

뒤로가기, 앞으로가기 버튼을 누르거나 아무 곡도 선택되지 않은 상태에서 재생 버튼을 누를 시 특정 row의 tableCell을 선택할 수 있도록 해야 한다.

MPMediaItem으로 MPMediaItemCollection에서 노래의 index가 안찾아짐

처음에는 MPMediaItem을 통해 MPMediaItemCollection에서 동일한 노래를 찾도록 코드를 짰었다. 그러나, 이렇게 코드를 짤 경우 애초에 MPMediaItem을 기반으로 MPMediaItemCollection 개체를 새로 생성해서 찾는 방식으로 작성하여 동일한 곡을 찾을 수 있을리가 없었다. 또한, 한 가지 변수만으로 동일성을 판단하는 것이 아닌, 모든 멤버변수를 기반으로 비교하기 때문에 설령 가능하다고 하더라도 엄청난 시간적 비용이 발생한다.
여기서 곡의 제목을 기반으로 찾기에는 마찬가지로 String의 모든 character을 비교하는 것은 비용이 크며, 동일한 제목의 경우에는 원치 않는 방향으로 작동될 것이 분명하였다.
그러던 와중 Apple Document를 확인해본 결과 각 곡마다 고유한 값인 persistentID라는 변수가 존재함을 발견하였고, 이를 기반으로 코드를 작성하였다.

Music에 id 변수 추가(persistentID)

현재 재생 중인 곡의 persistentID를 가져와, musicCell을 이루는 데이터 값인 musics:[Music]에서 해당 persistentID를 가지고 있는 노래의 인덱스가 필요하기 때문에, 비교를 위한 id 멤버변수를 Music 클래스에 추가해주었다.

버튼 선택에 따른 회색 배경 없애기

play 버튼을 누를 경우 선택된 것으로 인식 되면서 pause 버튼으로 바뀌는데, 이 때 버튼의 배경이 회색으로 변한다.
이는 Style을 Tinted로 바꾸면 해결된다.

버튼의 isSelected == true 가 될 시, 선택이 되었다는 표시로 background가 회색이 된다. 이는 Style을 Tinted로 했을 때, Background 컬러를 Default에서 Clear로 바꿔주면 된다.

버튼 색 AccentColor에 맞추기

버튼의 색을 스토리보드의 어트리뷰트 탭에서 설정해주었는데도 회색으로 보이는 현상이 발생하였다.
어트리뷰트 탭의 위쪽 부분에 있는 Foreground의 color 기준이 아니라, 하단으로 내리면 있는 Tint Color에 맞춰 렌더링 되는 듯 했다.
Tint Color을 Accent Color로 바꿔주자.
참고로 foreground와 tint color의 차이는 다음과 같다.

  • Foreground color usually applies to text based views (Text, Labels, etc.)
  • Images (as a template). Accent/Tint colors apply to controls (including images in controls, e.g. buttons, pickers etc).
    참고
profile
iOS 개발자가 되기 위한 스터디룸...

0개의 댓글