【问题标题】:applicationMusicPlayer volume notificationapplicationMusicPlayer 音量通知
【发布时间】:2011-12-13 16:25:39
【问题描述】:

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

[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolune];

有人知道如何隐藏这个通知吗?

【问题讨论】:

    标签: objective-c ios volume mpmusicplayercontroller


    【解决方案1】:

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

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

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

    【讨论】:

    • 我在显示 AirPlay 图标时遇到了问题,即使在 CGRectZero 中也是如此,这在测试期间没有发生,因为我们的 wifi 网络上没有 AirPlay 设备。你需要设置 volumeView.showsRouteButton = NO;
    • @AshFurrow,madmw,当我尝试在我的应用程序中访问上述代码时,它向我显示Use of undefined object volumeView 之类的错误。如何解决?任何需要的头文件或框架?
    • @Hemang 在文档中搜索 MPVolumeView,你会看到它是 MediaPlayer.framework 的一部分 重复直到没有编译器抱怨。
    • @madmw,我已经将它添加到我的应用程序中!但它仍然显示错误。
    • @ZuzooVn:答案添加示例。
    【解决方案2】:

    对于 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 在屏幕上“可见”,但对用户不可见。

    【讨论】:

    • 我花了很长时间让它在 iOS 6.1.4 中与 mpmusicplayercontroller setvolume 一起工作。我只是想在我的初始视图控制器上将我的应用程序的音量设置为一个状态,但是当 setvolume 发生时隐藏系统音量覆盖......我需要将代码放在其他地方吗?
    • edit:我把你上面的代码放到viewDidLoad中,我把MPMusicPlayerController setvolume放到super viewDidLoad中。
    • 通过将上述代码放入我的初始 VC 中,然后在后续 VC 上执行 setvolume 来实现此功能。绝对不是理想的方法,也不确定其他人是否是这样工作的,但目前该设置恰好适用于我的应用程序布局。
    【解决方案3】:

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

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

    这适用于 iOS 7 和 8。

    【讨论】:

    • 谢谢,为我工作。不知道为什么 Apple 决定为 iOS 8 改变这一点。
    【解决方案4】:

    斯威夫特 3

    您可以使用

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

    【讨论】:

      【解决方案5】:

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

      [volumeView release];
          ...
      

      【讨论】:

        【解决方案6】:

        对我来说,在 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)。

        【讨论】:

        • 对我也不起作用。我尝试使用延迟加载和 self.在初始化方法中。我没有靠近:(
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-28
        相关资源
        最近更新 更多