背景
在连接耳机时尝试将音量增加到某个点以上时,Apple 的一些 iOS 版本引入了警告。根据我的阅读,这是由于欧盟的健康和安全建议,并且仅在欧盟销售/使用的设备上可见。
当音量增加到超过某个点时,音量滑块停止并且滑块顶部闪烁黄色/橙色。警告出现后,用户仍然可以将音量增大到这一点,就好像滑块只是想确认他们确实知道自己在做什么。
当滑块不在屏幕上时,可以通过音量叠加看到类似的效果。在第一个(黄色)“高音量”警告中,似乎需要两次单击硬件音量增大按钮才能超过推荐的音量限制。
代码以查看它的实际效果:
import UIKit
import MediaPlayer
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let volumeView = MPVolumeView()
view.addSubview(volumeView)
volumeView.setTranslatesAutoresizingMaskIntoConstraints(false)
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[volume]-|", options: nil, metrics: nil, views: ["volume": volumeView]) as! [NSLayoutConstraint])
view.addConstraint(NSLayoutConstraint(item: volumeView, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: volumeView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 50))
let player = MPMusicPlayerController.applicationMusicPlayer()
player.setQueueWithQuery(MPMediaQuery.songsQuery())
player.play()
}
}
注意:我相信您只会在欧盟激活的设备上看到音量警告
问题
据我所知,这种行为是无证的,并且不一致。几次后,闪烁的滑块音量警告停止出现。在未来的某个时刻,它会再次出现,可能是经过一段时间后,或者在设备重启后;我不确定。
我在测试滑块时第一次看到警告,该滑块在公共控件状态下为轨道和拇指图像设置了空白图像:
let controlStates: [UIControlState] = [.Normal, .Highlighted, .Selected, .Disabled]
for state in controlStates {
volumeView.setMinimumVolumeSliderImage(transparentPixel, forState: state)
volumeView.setMaximumVolumeSliderImage(transparentPixel, forState: state)
volumeView.setVolumeThumbImage(transparentPixel, forState: state)
}
因此,黄色条可能是.Application
或.Reserved
控制状态的图像,也可能是完全私有的。我还没有发现,因为我正在等待警告再次开始出现......
这使得自定义和测试滑块的外观变得非常困难。在我的情况下,轨道的闪烁部分与我的自定义滑块看起来格格不入。我不是在寻找消除警告的方法,只是了解如何自定义其外观,并确保它在所有情况下看起来都不错。
任何人都可以对此有所了解吗?也许任何描述它如何/何时发生的文档(开发人员或其他),或者关于如何测试如此短暂和无法控制的东西的一些想法?