【问题标题】:Xcode 6- SWIFT- Cast CMTime as FloatXcode 6- SWIFT- 将 CMTime 转换为浮点数
【发布时间】:2014-09-17 15:22:07
【问题描述】:
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

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

找不到接受所提供参数的“init”的重载

我认为问题在于将 CMTime 转换为 Float。

【问题讨论】:

    标签: swift uislider cmtime


    【解决方案1】:

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

    还好有转换函数CMTimeGetSeconds()

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

    更新:Swift 3, player.currentTime 返回一个 TimeIntervalDouble 的类型别名。 因此转换为Float 简化为

    let floatTime = Float(player.currentTime)
    

    【讨论】:

    • 是的,这行得通谢谢@Martin PS:将来有没有什么技巧可以让我自己解决这些问题? (当然除了在这里问:))我尝试阅读 CMTime 参考,但无法弄清楚。
    • @Abdou023:嗯,CMTimeGetSeconds() 记录在 developer.apple.com/library/prerelease/ios/documentation/… 中。您还可以在 Swift 源文件(例如,在 CMTime 上)中按住 cmd 键单击类型或方法,这会引导您进入 Swift 定义,然后您可以在其中找到相关方法。
    【解决方案2】:

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

    可以直接写来使用值

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

    但这只会以毫秒为单位给出播放器的值。要以秒为单位获取值,请使用以下命令:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多