Ein bisschen alte Frage nehmen verweisen, aber ich brauchte auch eine Lösung für Gui13 Frage/Kommentar:
Wir sind nicht irgendeine Art mit der Kontrolle in unserer App, alle Volume-Interaktion basiert auf Lautstärketasten .. Also könnte ich vielleicht dies implementieren, aber ich würde eine Möglichkeit, um es mit den Lautstärketasten zu binden. Ist das möglich?
Apple empfiehlt MPVolumeView
verwenden, so kam ich mit auf den Punkt:
MPVolumeView *volumeView = [MPVolumeView new];
[self.view addSubview:volumeView];
und dann:
__block UISlider *volumeSlider = nil;
[[volumeView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UISlider class]]) {
volumeSlider = obj;
*stop = YES;
}
}];
[volumeSlider addTarget:self action:@selector(handleVolumeChanged:) forControlEvents:UIControlEventValueChanged];
mit:
- (void)handleVolumeChanged:(id)sender
{
NSLog(@"%s - %f", __PRETTY_FUNCTION__, ((UISlider *)sender).value);
}
Der [MPVolumeView new]
Code über inits MPVolumeView
w Wenn es keinen Rahmen gibt, ist es in unserer self.view
nicht sichtbar, wo es als Subview hinzugefügt wurde, aber es ist wichtig, dass es hinzugefügt werden muss!
Sie können auch die MPVolumeView
mit dem Code init:
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:self.view.frame];
volumeView.showsRouteButton = NO;
volumeView.showsVolumeSlider = NO;
[self.view addSubview:volumeView];
die auch die leere MPVolumeView
(das heißt ohne RouteButton und volume) wird init.
Was interessant ist, dass UISlider
subview (eigentlich MPVolumeSlider
, die Unterklasse von UISlider
) wird nach wie vor in den obigen enumerateObjectsUsingBlock
finden.
Dieser Ansatz ist auch deshalb interessant, weil Sie es den Verweis auf volumeSlider
und verwenden später Volumen von Code einzustellen speichern kann, oder das benutzerdefinierte Steuerelement:
Init und zu Ihrer Ansicht hinzuzufügen:
MPVolumeView *volumeView = [MPVolumeView new];
volumeView.showsRouteButton = NO;
volumeView.showsVolumeSlider = NO;
[self.view addSubview:volumeView];
Suchen und speichern Bezug auf 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;
}
}];
Add Zielaktion für UIControlEventValueChanged
:
[self.volumeSlider addTarget:self action:@selector(handleVolumeChanged:) forControlEvents:UIControlEventValueChanged];
Und dann aktualisieren Sie Ihr benutzerdefiniertes Steuerelement, wenn das Volumen geändert wurde (d. H. von dem Hardware-Lautstärkeregler):
- (void)handleVolumeChanged:(id)sender
{
NSLog(@"%s - %f", __PRETTY_FUNCTION__, self.volumeSlider.value);
self.myCustomVolumeSliderView.value = self.volumeSlider.value;
}
und auch:
- (IBAction)myCustomVolumeSliderViewValueChanged:(id)sender {
NSLog(@"set volume to: %f", self.myCustomVolumeSliderView.value);
self.volumeSlider.value = self.myCustomVolumeSliderView.value;
}
hoffte, das hilft jemand (und dass Apple nicht entfernt MPVolumeSlider von MPVolumeView).
Funktioniert der Stummschalter? –
Ich habe das gleiche Problem in meiner App. Der Mute-Schalter hat keine Wirkung. Wenn die App Multitasking ermöglicht, können Sie beim Multitasking auch nicht stummschalten. Ich wünschte, ich könnte das Problem beheben. – Doc
was ist die Version von ios7 verwendet Sie .. – codercat