2013-10-13 101 views
7

此问题似乎被问及答复很多次,但没有具体或准确的答案。因此我将重新构建iOS7的问题并希望得到一些帮助。iPhone iOS7系统声音(振铃和警报)音量控制

我需要使用AudioServicesPlaySystemSound来播放声音,因为时序非常关键,这是只有在可变时序下准确播放同步声音效果的方法(尝试其他选项)。

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

但是,对于iOS7,在设置>振铃警报音的声音中有一个滑动控件。有什么方法可以继承,复制或访问此幻灯片控件以从应用程序内更改此卷?

+0

我想我在Waze应用中看到了这个。我会翻阅。 –

+0

看看这个 - http://stackoverflow.com/questions/10286744/how-to-change-device-volume-on-ios-not-music-volume –

+0

@Paul Pivec如果你找到答案,请分享因为我也在寻找同样的东西。我无法相信苹果有这么愚蠢的限制... – user959631

回答

0

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

- (void)setVolume:(float)Level 
    { 

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

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

} 
  • 使用此代码从哪个按钮,你要控制你的代码中设置的音量的传球。
+0

如果这不是通过编程:请参考此链接http://stackoverflow.com/questions/10855874/audioservicesplaysystemsound-volume –

1

苹果公司建议使用MPVolumeView,所以我想出了这个:

添加volumeSlider属性:

@property (nonatomic, strong) UISlider *volumeSlider; 

初始化MPVolumeView某处添加到您的视图(可以隐藏,没有框架,或空因为showsRouteButton = NOshowsVolumeSlider = 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)。

+1

这似乎会改变系统音量,而不是OP所要求的振铃器/警报音量。 – levigroker