본문 바로가기
개발일지/FLO Music App

개발일지 ) FLO - Music App 3일차 (10.19)

by 후르륵짭짭 2020. 10. 21.
728x90
반응형

 

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

 

Trying to understand CMTime

I have seen some examples of CMTime (Three separate links), but I still don't get it. I'm using an AVCaptureSession with AVCaptureVideoDataOutput and I want to set the max and min frame rate of the...

stackoverflow.com

 

Seek(time + completionHandler)

developer.apple.com/documentation/avfoundation/avplayer/1387018-seek

 

Apple Developer Documentation

 

developer.apple.com

 

SeekTime -0.43 오류 

stackoverflow.com/questions/49291377/swift-ios-cmtimemakewithseconds-warning-error-of-0-433-introduced-due-to-ver

 

Swift iOS -CMTimeMakeWithSeconds: warning: error of -0.433 introduced due to very low timescale

I'm using AVPlayer to play a video. I followed this video tutorial Let's Build That App I use a UISlider/scrubber to go along with the current frame/time of the video. I have a video that is 10.43

stackoverflow.com

 

UISlide에서 사용가능한 TouchEvent

stackoverflow.com/questions/33400328/editingdidend-event-not-working-on-uislider

 

EditingDidEnd event not working on UISlider

I am trying to detect when the user finishes editing a slider. So far I can detect the event when using the AllTouchEvents argument. radiusSlider.addTarget(self, action: "test",

stackoverflow.com

 

UIResponder에 대한 개념

baked-corn.tistory.com/129

 

[ios] Responder Chain and Touch Event

[ios] Responder Chain and Touch Event Overview 앱은 응답자 객체를 이용해 이벤트를 받고 처리합니다. 응답자 객체는 UIResponder 클래스의 객체로 서브클래스로는 UIView , UIViewController , UIApplication..

baked-corn.tistory.com

 

728x90
반응형

댓글