applicationMusicPlayer卷通知

时间:2011-10-23 19:08:32

标签: objective-c ios volume mpmusicplayercontroller

我正在使用applicationMusicPlayer,当我尝试更改音量时会出现视觉通知,如图所示。 这是我正在使用的代码:

[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolune];

有人知道如何隐藏此通知吗?

enter image description here

6 个答案:

答案 0 :(得分:28)

我不知道文档在哪里这么说,但如果您在应用中添加MPVolumeView视图,则系统卷覆盖会消失。即使它不可见:

- (void) viewDidLoad 
{
    [super viewDidLoad];
    MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame: CGRectZero];
    [self.view addSubview: volumeView];
    [volumeView release];
    ...
}

您可以使用硬件音量按钮,setVolume方法或直接与覆盖图未显示的控件(如果可见)进行交互。

答案 1 :(得分:4)

对于iOS6,我必须为MPVolumeView的图像字段设置一个alpha 0和非零大小的图像,以便让默认的音量变化通知消失。

// hide the hardware volume slider
UIImage *thumb = [[UIImage alloc] initWithCIImage:[UIImage imageNamed:@"volumeHider"].CIImage scale:0.0 orientation:UIImageOrientationUp];
MPVolumeView *hwVolume = [[MPVolumeView alloc] initWithFrame:self.frame];
[hwVolume setUserInteractionEnabled:NO];
hwVolume.showsRouteButton = NO;
[hwVolume setVolumeThumbImage:thumb forState:UIControlStateNormal];
[hwVolume setMinimumVolumeSliderImage:thumb forState:UIControlStateNormal];
[hwVolume setMaximumVolumeSliderImage:thumb forState:UIControlStateNormal];
[self addSubview:hwVolume];

这使MPVolumeView在屏幕上显示为“可见”,但对用户不可见。

答案 2 :(得分:2)

我最近遇到了同样的问题。我没有将MPVolumeView添加到当前视图控制器的视图中,而是在应用程序开始时将其添加到应用程序的窗口中一次:

CGRect rect = CGRectMake(-500, -500, 0, 0);
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:rect];
[self.window addSubview:volumeView];

这适用于iOS 7和8。

答案 3 :(得分:0)

我在iOS 6中取得了成功。虽然它表现不佳。滑动thumbImage时会造成相当大的延迟。我必须取出最后两行代码才能使其正常工作。

[volumeView release];
    ...

答案 4 :(得分:0)

对我来说,在iOS 7上,以上解决方案都没有奏效。我是这样做的:

_volume = [[MPVolumeView alloc] initWithFrame: CGRectMake(-100,-100,16,16)];
_volume.showsRouteButton = NO;
_volume.userInteractionEnabled = NO;
[self.view addSubview:_volume];
[_volume release];

即,只需将MPVolumeView的帧设置为屏幕外位置,例如(-100,-100)。

答案 5 :(得分:0)

Swift 3

您可以使用

隐藏系统 MPVolumeView
override func viewDidLoad() {
    super.viewDidLoad()
    let volumeView = MPVolumeView(frame: CGRect.zero)
    self.view.addSubview(volumeView)
  }