使用MPVolumeView后,如何重新打开系统卷覆盖?

Sha*_*man 54 iphone media-player ios

我正在构建一个非原生声音格式的音频播放器.应用程序的层次结构基于iPod.app.它有许多UITableView's和one UIView(TrackView),用于MPVolumeView允许用户在屏幕上更改音量.在第一次TrackView显示之前,使用硬件按钮更改音量会按预期(和所需)显示系统音量叠加.当TrackView可见MPVolumeView时,自从使用硬件按钮(也需要)更改音量时更新后,这些叠加不会出现.

问题在于:一旦退出TrackView系统,使用硬件音量按钮时就不会出现音量叠加.我曾尝试编程allocing,创建和加入MPVolumeViewTrackViewController viewWillAppear:,然后删除,释放和零-ING相同MPVolumeViewTrackViewController viewWillDisappear:.

这在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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

您需要在Xcode中将MediaPlayer框架添加到项目中,并在Interface构建器中打开MainWindow.xib,以添加UIView和UIButton IBOutlets并将IBAction连接到UIButton.

Nil*_*nch 1

遗憾的是,这是早期版本 iOS 中私有框架的一个问题。

我理解您希望为此制定解决方案,但这会导致您的代码操纵私有框架,使您的应用程序无法通过批准。

幸运的是,出现此错误的版本跨度很短,并且这些版本的流通设备数量正在逐分钟减少。