AppleがMPVolumeView
を使用することをお勧めしますので、私はこの思い付いた:
volumeSlider
プロパティを追加します。
@property (nonatomic, strong) UISlider *volumeSlider;
初期MPVolumeView
と(フレームなしで、非表示にすることができ、あなたのビューにどこかに追加したり、 showsRouteButton = NO
と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
を設定するループしないことを確認してください。
これは誰かを助けてくれることを願っています(アップルはMPVolumeViewからMPVolumeSliderを削除しないことを願います)。
私はWazeアプリでこれを見たと思います。私は見渡すでしょう。 –
これを見てください - http://stackoverflow.com/questions/10286744/how-to-change-device-volume-on-ios-not-music-volume –
@Paul Pivec答えを見つけたら、私も同じものを探しています。私はAppleがそんなに愚かな制限を持っているとは信じられない... – user959631