7

这个问题似乎被多次询问和回答,但没有具体或准确的答案。因此,我将为 iOS7 重新构建问题并希望得到一些帮助。

我需要使用 AudioServicesPlaySystemSound 来播放声音,因为时间很关键,这是通过可变时间准确播放同时声音效果的唯一方法(尝试所有其他选项)。

这很好用,但我想调整音量。它似乎能够做到这一点的唯一方法是使用按钮,尽管有人说使用 MPVolumeView(仅适用于音乐),有人说使用 MPMusicPlayerController(但这也仅适用于音乐,现在已被贬值),还有其他人只是这么说无法完成 - 这看起来更有可能。

但是,对于 iOS7,在设置>声音中有一个用于铃声警报音量的滑动控件。有什么方法可以子类化、复制或访问此滑动控件以从应用程序内更改此音量?

4

2 回答 2

1

苹果推荐使用MPVolumeView,所以我想出了这个:

添加volumeSlider属性:

@property (nonatomic, strong) UISlider *volumeSlider;

初始化MPVolumeView并添加到您的视图的某个位置(可以隐藏,没有框架,或者因为showsRouteButton = NOand为空showsVolumeSlider = NO):

MPVolumeView *volumeView = [MPVolumeView new];
volumeView.showsRouteButton = NO;
volumeView.showsVolumeSlider = NO;
[self.view addSubview:volumeView];

查找并保存参考UISlider

__weak __typeof(self)weakSelf = self;
[[volumeView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if ([obj isKindOfClass:[UISlider class]]) {
        __strong __typeof(weakSelf)strongSelf = weakSelf;
        strongSelf.volumeSlider = obj;
        *stop = YES;
    }
}];

添加目标操作UIControlEventValueChanged

[self.volumeSlider addTarget:self action:@selector(handleVolumeChanged:) forControlEvents:UIControlEventValueChanged];

然后在音量更改时更新您的自定义控件(即通过硬件音量控件):

- (void)handleVolumeChanged:(id)sender
{
    NSLog(@"%s - %f", __PRETTY_FUNCTION__, self.volumeSlider.value);
    self.myCustomVolumeSliderView.value = self.volumeSlider.value;
}

还有其他方式:

- (IBAction)myCustomVolumeSliderViewValueChanged:(id)sender {
    NSLog(@"set volume to: %f", self.myCustomVolumeSliderView.value);
    self.volumeSlider.value = self.myCustomVolumeSliderView.value;
}

注意:确保设置self.volumeSlider.value不会循环回到设置self.myCustomVolumeSliderView.value

希望这对某人有所帮助(并且 Apple 不会从 MPVolumeView 中删除 MPVolumeSlider)。

于 2014-03-02T15:47:54.970 回答
0

我想你想通过程序来控制你的音量

 - (void)setVolume:(float)Level
  {

      OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level);

    if (errorMsg) {
        NSLog(@"AudioQueueSetParameter returned %d when setting the volume.", errorMsg);
    }

 }
  • 使用此代码设置从您的代码传递的音量级别,通过您要控制的按钮。
于 2013-12-23T09:55:43.617 回答