Sha*_*man 54 iphone media-player ios
我正在构建一个非原生声音格式的音频播放器.应用程序的层次结构基于iPod.app.它有许多UITableView's和one UIView(TrackView),用于MPVolumeView允许用户在屏幕上更改音量.在第一次TrackView显示之前,使用硬件按钮更改音量会按预期(和所需)显示系统音量叠加.当TrackView可见MPVolumeView时,自从使用硬件按钮(也需要)更改音量时更新后,这些叠加不会出现.
问题在于:一旦退出TrackView系统,使用硬件音量按钮时就不会出现音量叠加.我曾尝试编程allocing,创建和加入MPVolumeView的TrackViewController viewWillAppear:,然后删除,释放和零-ING相同MPVolumeView的TrackViewController 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.
遗憾的是,这是早期版本 iOS 中私有框架的一个问题。
我理解您希望为此制定解决方案,但这会导致您的代码操纵私有框架,使您的应用程序无法通过批准。
幸运的是,出现此错误的版本跨度很短,并且这些版本的流通设备数量正在逐分钟减少。
| 归档时间: |
|
| 查看次数: |
2965 次 |
| 最近记录: |