2013-10-13 15 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答えを見つけたら、私も同じものを探しています。私はAppleがそんなに愚かな制限を持っているとは信じられない... – 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

Appleが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を設定するループしないことを確認してください。

これは誰かを助けてくれることを願っています(アップルはMPVolumeViewからMPVolumeSliderを削除しないことを願います)。

+1

これは、OPによって尋ねられたように、システム音量ではなく、呼び出し音/警告音量を変更するように見えます。 – levigroker

関連する問題