Xcode 6- SWIFT-将CMTime转换为Float

时间:2014-09-17 15:22:08

标签: swift uislider cmtime

var songs = MPMediaQuery()
var localSongs = songs.items
songList = NSMutableArray(array: localSongs)

tableView.reloadData()

var song = MPMediaItem(coder: songList[0] as NSCoder)

var currentItem = AVPlayerItem(URL: song.valueForProperty(MPMediaItemPropertyAssetURL) as NSURL)

player.replaceCurrentItemWithPlayerItem(currentItem)

player.play()

var songTitle: AnyObject! = song.valueForProperty(MPMediaItemPropertyTitle)

songName.text = songTitle as? String

sliderOutlet.value = Float(player.currentTime()) // <<-Error here

我正在构建一个音乐播放器,我想要一个滑块来显示歌曲的持续时间,但我收到此错误

  

无法找到&#39; init&#39;接受提供的参数

我认为问题是将CMTime转换为Float。

2 个答案:

答案 0 :(得分:21)

CMTime结构,包含valuetimescale和其他字段, 所以你不能只是将它“转换”为浮点值。

幸运的是,有一个转换函数CMTimeGetSeconds()

let cmTime = player.currentTime()
let floatTime = Float(CMTimeGetSeconds(player.currentTime()))

更新: Swift 3开始, player.currentTime返回 TimeInterval这是Double的类型别名。 因此,转换为Float简化为

let floatTime = Float(player.currentTime)

答案 1 :(得分:0)

CMTime是一个结构,包含值,时间刻度,标志和纪元。因此,您不能将其“转换”为浮点值。

您可以直接编写

来使用该值
sliderOutlet.value = Float(player.currentTime().value)

但是这只会给出播放器的值,以毫秒为单位。要在几秒钟内获得该值,请使用:

sliderOutlet.value = Float(CMTimeGetSeconds(player.currentTime()))

请注意,这可能也不是你应该拥有滑块值的正确方法。