Я создаю аудиоплеер для не родного звукового формата.Иерархия приложения основана на iPod.app.Он имеет число UITableView
и один UIView
(TrackView
), который использует MPVolumeView
, чтобы позволить пользователю изменять громкость на экране.До тех пор, пока в первый раз TrackView
не станет видимым, изменение громкости с помощью аппаратных кнопок отображает наложение громкости системы, как и ожидалось (и желательно).Когда виден TrackView
, эти наложения не отображаются, поскольку MPVolumeView
обновляется при изменении громкости с помощью аппаратных кнопок (также желательно).
Вот проблема: после выхода из TrackView
Наложение громкости системы не отображается при использовании аппаратных кнопок громкости.Я попытался программно выделить, создать и добавить MPVolumeView
в TrackViewController viewWillAppear:
, а затем удалить, выпустить и обнулить тот же MPVolumeView
в TrackViewController viewWillDisappear:
.
Этого не происходит в iPod.приложение.После возврата из представления, содержащего MPVolumeView
, при использовании аппаратных кнопок регулировки громкости отображается системная громкость.
Что мне не хватает?
Обновление 2: Похоже, что это ошибка в MPVolumeView, появившаяся после iOS 3.2 и исправленная в 4.2.
Обновление: Я сделал простое сокращение из окна по умолчанию -основанный на проекте приложения, который демонстрирует такое же поведение.Как только MPVolumeView становится видимым, наложения системного тома больше никогда не отображаются в приложении.
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
YouВам нужно будет добавить платформу MediaPlayer в ваш проект в Xcode и открыть MainWindow.xib в Интерфейсном конструкторе, чтобы добавить IBOutlets UIView и UIButton и подключить IBAction к UIButton.