iOS/Swift 어플 따라하기

[Swift] 뮤직 앱 Seeking

Chafle 2022. 3. 23. 16:40
반응형

 

1. TimeOberver
2. 시간 정보 업데이트
3. 슬라이더 정보 업데이트
4. seeking
1. TimeObserver

updatePlayButton()

updateTime(time: CMTime.zero)

timeObserver = simplePlayer.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1, preferredTimescale: 10), queue: DispatchQueue.main, using: { time in

            self.updateTime(time: time)

        })

//곡에 해당하는 현재 시간을 받아서 업데이트 시키기 

 //CMTime(seconds: 1, preferredTimescale: 10) //= 0.1초  시간(기준시간)과 스케일(어떻게 분할 시킬 거냐)

 //CMtime은 Core Media AVFoundation하위에 있는 CoreMedia에서 제공하는 툴을 사용하는 겁니다.

//queue: DispatchQueue.main UIlabel을 0.1초마다 업데이트 시키는데, UIlebel은 mainThread공간에서 변경이 돼야 하는데, 메인스레드한테 0.1초마다 알려주겠다는 의미입니다.

 

 


2. 시간정보 업데이트 하기

func updateTime(time: CMTime) {

        currentTimeLabel.text = secondsToString(sec: simplePlayer.currentTime)

        // 플레이어 객체에서 커런트 타임 가져오기 -ex. 3.1234 >> 00:03

        totalDurationLabel.text = secondsToString(sec: simplePlayer.totalDurationTime)

        // 토탈 시간 가져오기 - ex. 39.2045  >> 00:39

      


 

3. 슬라이더 정보 업데이트 하기

        if isSeeking == false {

            timeSlider.value = Float(simplePlayer.currentTime/simplePlayer.totalDurationTime)

        }

   

반응형

 


4. Seeking하기

        guard let currentItem = simplePlayer.currentItem else { return }

        let position = Double(sender.value)

// 0~1 사이의 값으로 표현해줍니다.

        let seconds = position * currentItem.duration.seconds        

        let time = CMTime(seconds: seconds, preferredTimescale: 100)

// ex. 90.1235초인데 더블타입이다 보니 길어질 수 있지만 00.00만 쓰겠다는 표현

        simplePlayer.seek(to: time)

    }

반응형