我正在为非本地声音格式构建音频播放器。该应用程序的层次结构基于iPod.app。它有一个UITableView
和一个UIView
(TrackView
),它使用MPVolumeView
来允许用户更改屏幕上的音量。直到第一次使用硬件按钮TrackView
变为可见时,使用硬件按钮显示系统音量覆盖图(如需要)。当TrackView
可见时,由于MPVolumeView
在使用硬件按钮(也是所需)更改音量时进行更新,因此不会显示这些覆盖图。如何在使用MPVolumeView后重新打开系统音量叠加层?
问题出在这里:一旦您退出TrackView
,使用硬件音量按钮时不会出现系统音量叠加。我尝试编程分配,创建并添加TrackViewController viewWillAppear:
中的MPVolumeView
,然后删除,释放和删除TrackViewController viewWillDisappear:
中的相同MPVolumeView
。
这不会发生在iPod.app中。退出包含MPVolumeView
的视图后,使用硬件音量按钮时系统音量重叠显示。
我错过了什么?
更新2:这似乎是被的iOS 3.2之后的某个引入并固定在4.2 MPVolumeView的错误。
更新:我从表现出相同的行为默认的基于窗口的应用程序项目一个简单的减少。一旦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
你需要在MediaPlayer框架添加到您的项目在Xcode和Interface Builder中打开的MainWindow.xib到添加UIView和UIButton IBOutlets并将IBAction连接到UIButton。
这似乎是对iPod的一个问题倒是运行iOS 4.1。运行在iOS 3.2的iPad上的相同应用程序不会出现此问题。我正在更新我的一个iPod触摸到iOS 4.2以查看问题是否已得到解决。 (在任何情况下,我仍然在寻找解决方案,因为4.1上的iPod.app不会出现这种行为。) – 2010-11-28 14:48:03