小编Tim*_*imD的帖子

iOS 8.x Swift MPRemoteCommandCenter - 禁用音频播放控件

我目前正在遇到一个错误或缺乏对Apple文档的理解.

一些背景.我正在使用AVPlayer启动音频播放.我正在使用AVPlayer,因为它提供了更精确的播放定位控制(放入歌曲的特定位置).

当我实现下面的代码时,MPRemoteCommandCenter只显示一个按钮(播放/暂停按钮),并且所有其他按钮(后退和前进)都不存在.

  MPRemoteCommandCenter.sharedCommandCenter().playCommand.addTarget(self, action: "remoteCommandMute")
  MPRemoteCommandCenter.sharedCommandCenter().pauseCommand.addTarget(self, action: "remoteCommandMute")
Run Code Online (Sandbox Code Playgroud)

然后,我可以切换它是否被禁用或者不正常.根据Apple的文档,你应该能够切换启用的属性,它应该完全隐藏按钮而不必向他们添加目标(至少从我的理解).以下是文档的参考

如果我没有将.addTarget代码包含在任何按钮中,只需按照apple中的说明禁用所述按钮,它就不起作用.

    MPRemoteCommandCenter.sharedCommandCenter().previousTrackCommand.enabled = false
    MPRemoteCommandCenter.sharedCommandCenter().nextTrackCommand.enabled = false
    MPRemoteCommandCenter.sharedCommandCenter().playCommand.enabled = false
    MPRemoteCommandCenter.sharedCommandCenter().pauseCommand.enabled = false
Run Code Online (Sandbox Code Playgroud)

基于这种行为,我希望禁用所有三个按钮反过来会使它们隐藏,但这根本不是行为,实际上禁用它们对它们没有影响.您仍然可以按下它们,它们的行为就好像根本不存在该代码一样.但是,如果(如上所述)我将.addTarget添加到按钮,如果我将.enabled标志设置为false,它将被禁用.

如果这不是预期的行为,请纠正我的逻辑/理解,但在我看来,这绝对是苹果的反思.如果我的应用程序不支持暂停向前或向后功能,则该按钮根本不应出现并禁用它不应该只是将其变为灰色(就像它当前那样).如果你不向它们添加目标,它也不应该神奇地隐藏按钮.

另外,每当我向按钮添加目标时,即使我不希望我的应用程序具有前进和后退功能,它们也能正常工作.

audio playback ios swift

5
推荐指数
1
解决办法
2619
查看次数

Swift货币格式ISO标准转换问题

阅读NSNumberFormatter苹果文件后,在这里我想货币转换为每尤伯杯API文档.两个文档都声明它们使用ISO格式标准,但是在我的代码中我发现情况并非如此.ISO 4217标准在此处 和ISO 本身

public static func convertStringCurrencyToNumber(strCurrency:String, locale:String)->Double {
    var formatter = NSNumberFormatter()
    formatter.locale = NSLocale(localeIdentifier: "\(locale)")
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
    println(formatter.numberFromString(strCurrency))
    if let converted:Double = formatter.numberFromString(strCurrency)?.doubleValue {
        return converted
    }else{
        return 0.0
    }

}
Run Code Online (Sandbox Code Playgroud)

我的单元测试这个功能

func testCurrencyConversion() {
    let fiveBucks = UberReceipt.convertStringCurrencyToNumber("$5.00", locale: "en_US")
    println(fiveBucks)
    let tenBucks = UberReceipt.converStringCurrencyToNumber("$10.00", locale:"USD")
    println(tenBucks)
}
Run Code Online (Sandbox Code Playgroud)

控制台日志:可选(5.0)nil 5.0 0.0

如果我使用"en_US"结果是预期的,那将是5.0,但是如果我使用Uber返回的语言环境"USD",则返回值为0.0.在打印/检查格式化程序转换货币时发生的情况时,我发现它返回nil.

我发现文档误导了它对formatter.locale = NSLocale(...)的说法.根据文档"语言环境确定许多格式化程序属性的默认值,例如ISO国家/地区和语言代码,货币代码 ...."

我认为设置语言环境也应该设置货币代码.这是不正确的?如果我使用与ISO代码相关的非标准"en_US"代码(应该是Apple文档使用的代码),为什么我的代码会工作?"USD"

currency ios swift

3
推荐指数
1
解决办法
2043
查看次数

标签 统计

ios ×2

swift ×2

audio ×1

currency ×1

playback ×1