Je construis un lecteur audio pour un format sonore non-natif. La hiérarchie de l'application est basée sur l'iPod.app. Il a un nombre de UITableView
et un UIView
(TrackView
) qui utilise un MPVolumeView
pour permettre à l'utilisateur de changer le volume à l'écran. Jusqu'à la première fois TrackView
devient visible en changeant le volume en utilisant les boutons matériels affiche la superposition du volume du système comme prévu (et souhaité). Lorsque TrackView
est visible ces superpositions n'apparaissent pas depuis les mises à jour MPVolumeView
lors de la modification du volume avec les touches physiques (également souhaitées).Comment réactiver le recouvrement du volume système après avoir utilisé MPVolumeView?
Voici le problème: lorsque vous quittez TrackView
, la superposition du volume système n'apparaît pas lorsque vous utilisez les boutons de volume matériel. J'ai essayé d'allouer par programme, en créant et en ajoutant le MPVolumeView
dans TrackViewController viewWillAppear:
puis en supprimant, en relâchant et en supprimant le même MPVolumeView
dans TrackViewController viewWillDisappear:
.
Cela ne se produit pas dans l'iPod.app. Une fois que vous avez quitté la vue qui contient un MPVolumeView
, les superpositions de volume système s'affichent lors de l'utilisation des boutons de volume matériel.
Qu'est-ce qui me manque?
Mise à jour 2: Cela semble être un bogue dans MPVolumeView qui a été introduit quelque temps après iOS 3.2 et fixé à 4,2.
Mise à jour: je fait une simple réduction du projet d'application fenêtre par défaut qui présente le même comportement. Une fois qu'un MPVolumeView devient visible, les superpositions de volume système ne sont plus visibles dans l'application.
VolumeAppDelegate.h:
#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
@interface VolumeAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
IBOutlet UIView *volumeView;
IBOutlet MPVolumeView *mpVolumeView;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
-(IBAction)toggleVolumeView:(id)sender;
@end
VolumeAppDelegate.m:
#import "VolumeAppDelegate.h"
@implementation VolumeAppDelegate
@synthesize window;
-(IBAction)toggleVolumeView:(id)sender{
if (mpVolumeView == nil){
mpVolumeView = [[MPVolumeView alloc] initWithFrame:volumeView.bounds];
[volumeView addSubview:mpVolumeView];
}
else{
[mpVolumeView removeFromSuperview];
[mpVolumeView release];
mpVolumeView = nil;
}
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self.window makeKeyAndVisible];
mpVolumeView = nil;
return YES;
}
- (void)dealloc {
[window release];
[super dealloc];
}
@end
Vous aurez besoin d'ajouter le cadre MediaPlayer à votre projet dans Xcode et ouvrir MainWindow.xib dans le constructeur Interface Ajoutez les UOutlets UIView et UIButton et raccordez IBAction à UIButton.
Cela semble être un problème sur iPod touch sous iOS 4.1. La même application fonctionnant sur mon iPad avec iOS 3.2 ne présente pas ce problème. Je suis en train de mettre à jour l'un de mes iPod touche à iOS 4.2 maintenant pour voir si le problème a été résolu. (En tout cas je suis toujours à la recherche d'une solution puisque iPod.app sur 4.1 ne montre pas ce comportement. –
Le problème semble être résolu dans iOS 4.2 mais si quelqu'un a une solution pour les versions antérieures, je suis toujours intéressé. –
Je rencontre un problème similaire sur 4.2.1, Mon MPVolumeView n'est pas toujours visible mais affiché et masqué en réponse à un tap sur l'écran. Lorsque mon équivalent de la vue Piste est chargé, l'affichage du volume n'est pas visible et la superposition du volume système est affichée en réponse aux modifications du bouton de volume. Une fois que MPVolumeView est affiché, la superposition de volume n'apparaît plus (que MPVolumeView soit masqué par la suite) jusqu'à ce que la vue soit retirée de la vue et ajoutée à nouveau. – prendio2