我正在构建一个支持非本地音频格式的音频播放器。应用程序的层次结构是基于iPod.app的。它有许多UITableView和一个UIView(TrackView),该UIView使用MPVolumeView允许用户在屏幕上更改音量。在TrackView首次可见之前,使用硬件按钮更改音量会像预期(也希望如此)显示系统音量叠加图。当TrackView可见时,这些叠加图不会出现,因为使用硬件按钮更改音量时MPVolumeView会更新(也是所期望的)。
问题在于:一旦退出TrackView,在使用硬件音量按钮时系统音量叠加图不会显示。我尝试在TrackViewController的viewWillAppear:中编程分配、创建和添加MPVolumeView,然后在TrackViewController的viewWillDisappear中删除、释放和nil相同的MPVolumeView。
iPod.app中不会出现这种情况。一旦退出包含MPVolumeView的视图,使用硬件音量按钮时系统音量叠加图就会显示。
我错过了什么?
更新2:这似乎是一个MPVolumeView中的错误,在iOS 3.2之后引入,在4.2中修复。
更新:我从默认的基于窗口的应用程序项目制作了一个简单的减少,展示了相同的行为。一旦MPVolumeView变为可见状态,系统音量叠加图在应用程序中将永远不会出现。
VolumeAppDelegate.h:
问题在于:一旦退出TrackView,在使用硬件音量按钮时系统音量叠加图不会显示。我尝试在TrackViewController的viewWillAppear:中编程分配、创建和添加MPVolumeView,然后在TrackViewController的viewWillDisappear中删除、释放和nil相同的MPVolumeView。
iPod.app中不会出现这种情况。一旦退出包含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
你需要在Xcode中将MediaPlayer框架添加到项目中,并在Interface Builder中打开MainWindow.xib以添加UIView和UIButton IBOutlets,并将IBAction连接到UIButton上。