3일차 개발이 가장 힘들었다,,,
그래도 많은 것을 경험하고 배울 수 있어서 좋은 경험이였다.
구현한 내용)
1. addPeriodicTimeObserver 를 이용해 Main Thread에서 지속적으로 음악 재생 추적
AVplay 클래스에 addPeriodicTimeObserver 라는 것이 있는데, 이는 CMTime 형태의 시간을 주어지면 지정한 thread에서 탐색을 하게 된다.
2. slider 추가 및 변경
위의 addPeriodicTimeObserver로 시간을 추적하고 mainThread에서 작동하니, updateSlider 함수를 구현해서 slider가 지속적으로 앞으로 움직일 수 있도록 구현 했다.
그런데 이 때 중요한 것은 만약 slider를 손으로 끌었을 때는 updateSlider가 변경 되지 않도록 해야 했다.
3. seekBarPressed() 와 seekBarOut() 구현
slider를 누르고 있을 때와 땠을 때의 상태 변화가 있어야 하기 때문에,
touchDown을 했을 때는 seekBarPressed를 작동 하도록 했고
touchUPInside를 했을 때는 seekBarOut이 작동하도록 했다.
@IBAction func seekBarOut(_ sender: UISlider) {
let second = sender.value * Float( musicData!.duration )
let cmtime = CMTime(seconds: Double(second), preferredTimescale: 1000)
playerViewModel.seek(time: cmtime) { (_) in
self.seekingPressed = false
}
}
그리고 위와 같이 손을 땠을 때, seek 메소드를 작동 시켰고 complete 됐을 때 seekPressed를 false로 바꿔줬다.
어려웠던 부분)
일단 CMTime에 대한 정확한 이해가 없어서 이 부분을 공부한다고 애먹었다.
아직 완벽하게 이해 한 것은 아니나, value가 1초 단위이고 preferredTimescale 이 그 1초를 몇초 단위로 나눠 줄 건지를 적는 것이다.
만약에 CMTime(1,1)이렇게 하면 1초 단위라 생각했는데, overflowr가 발생한다고 한다...
With this method you can set a tolerance on it to compensate for the truncated overflow
이 방법을 사용하면 잘린 오버플로를 보상하기 위해 허용 오차를 설정할 수 있습니다.
왜 인지는 구체적인 설명이 없었는데,,,, 한번 찾아봐야겠다.
또한 TouchUpInside랑 TouchDown에 대한 사용을 해본적이 없어서 slider를 눌렀을 때와 땟을 때의 감지 부분을 어떻게 구현해야할 지
막막했는데, 제공하는 함수를 열심히 구글링 해서 찾았다.
참고 사이트 :
CMTime 이란
stackoverflow.com/questions/12902410/trying-to-understand-cmtime
Seek(time + completionHandler)
developer.apple.com/documentation/avfoundation/avplayer/1387018-seek
SeekTime -0.43 오류
UISlide에서 사용가능한 TouchEvent
stackoverflow.com/questions/33400328/editingdidend-event-not-working-on-uislider
UIResponder에 대한 개념
'개발일지 > FLO Music App' 카테고리의 다른 글
개발일지 ) FLO - Music App 6일차 (10.22) (4) | 2020.10.24 |
---|---|
개발일지 ) FLO - Music App 5일차 (10.21) (0) | 2020.10.22 |
개발일지 ) FLO - Music App 4 일차 (10.20) (0) | 2020.10.22 |
개발일지 ) FLO - Music App 2일차 (10.18) (0) | 2020.10.19 |
개발일지) FLO - Music App 1일차 (10.17) (0) | 2020.10.18 |
댓글