带滑块和iphone按钮的AVPlayer音量控制

时间:2014-02-24 16:14:04

标签: ios iphone objective-c avplayer volume

我有一个无线电流AVPlayer,我创建了一个控制播放器音量的滑块。

-(void)adjustVolume
{
    if (self.player != nil)
    {
        NSLog(@"Adjusting volume...");
        self.player.volume = volumeControl.value;
         NSLog(@"%f",self.player.volume);
    }
}

我需要将滑块中的值连接到按下音量按钮时的值。因此,例如,如果我将滑块移动到50%,之后我按下手机侧面的音量增大按钮,我需要它从50%增加,因为那是我通过滑块设置的音量。 / p>

我该怎么做?

LATER EDIT:

使用此代码我按下音量键时设法更新滑块,但我不能再拖动滑块,因为它总是随系统音量更新。

audioSession = [AVAudioSession sharedInstance];
BOOL ok;
NSError *setCategoryError = nil;
ok = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];

volume = audioSession.outputVolume;
volumeControl.value = volume;
NSTimer *volumeTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateSound) userInfo:nil repeats:YES];

和updateSound:

- (void)updateSound{
    volume = audioSession.outputVolume;
    volumeControl.value = volume;
}

移动滑块时如何更改系统音量?我试图给audioSession.outputVolume一个值,但当然,它不会那样工作。

2 个答案:

答案 0 :(得分:2)

您可以收听音量变化通知

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(volumeChanged:)
 name:@"AVSystemController_SystemVolumeDidChangeNotification"
 object:nil];

你的选择器看起来像这样

- (void)volumeChanged:(NSNotification *)notification
{
    float volume =
    [[[notification userInfo]
      objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"]
     floatValue];

    // Do stuff with volume
}

答案 1 :(得分:0)

最后找到了我尝试做的解决方案here

我删除了以上所有代码,并在我的.h文件中包含了MediaPlayer框架,并将此代码包含在我的.m文件中:

   UIView *wrapperView = [[UIView alloc] initWithFrame:CGRectMake(30, 350, 260, 20)];
    wrapperView.backgroundColor = [UIColor clearColor];
    [self.view addSubview:wrapperView];

    MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame: wrapperView.bounds];
    [wrapperView addSubview:volumeView];

希望这也有助于其他人。