Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用MPVolumeView后,如何重新打开系统卷覆盖?_Iphone_Ios_Media Player - Fatal编程技术网

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

Iphone 使用MPVolumeView后,如何重新打开系统卷覆盖?,iphone,ios,media-player,Iphone,Ios,Media Player,我正在为非本地声音格式构建一个音频播放器。应用程序的层次结构基于iPod.app。它有多个UITableView,还有一个UIView(TrackView),使用MPVolumeView允许用户更改屏幕上的音量。直到第一次看到TrackView时,使用硬件按钮更改音量将按预期(和所需)显示系统音量叠加。当TrackView可见时,这些覆盖不会出现,因为MPVolumeView会在使用硬件按钮(也需要)更改音量时更新 问题是:一旦退出TrackView,使用硬件音量按钮时,系统音量叠加不会出现。我

我正在为非本地声音格式构建一个音频播放器。应用程序的层次结构基于iPod.app。它有多个
UITableView
,还有一个
UIView
TrackView
),使用
MPVolumeView
允许用户更改屏幕上的音量。直到第一次看到
TrackView
时,使用硬件按钮更改音量将按预期(和所需)显示系统音量叠加。当
TrackView
可见时,这些覆盖不会出现,因为
MPVolumeView
会在使用硬件按钮(也需要)更改音量时更新

问题是:一旦退出
TrackView
,使用硬件音量按钮时,系统音量叠加不会出现。我曾尝试通过编程方式分配、创建和添加
TrackViewController视图中的
MPVolumeView
将出现:
,然后在
TrackViewController视图中删除、释放和取消相同的
MPVolumeView
将消失:

iPod.app中不会出现这种情况。退出包含
MPVolumeView
的视图后,使用硬件音量按钮时,系统音量叠加显示

我错过了什么


更新2:这似乎是MPVolumeView中的一个bug,它是在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

您需要在Xcode中将MediaPlayer框架添加到您的项目中,并在Interface builder中打开MainWindow.xib,以添加UIView和UIButton IBOutlets,并将iAction连接到UIButton。

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

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


幸运的是,出现此错误的版本跨度很短,使用这些版本的设备数量正在以分钟为单位不断减少。

您可以通过编程方式增加和减少设备体积,如:

- (void)setVolume:(float)Level
{

   OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level);

   if (errorMsg) {
      NSLog(@"%d", errorMsg);
   }

}

这似乎是运行iOS 4.1的iPod Touchs上的一个问题。我的iPad上运行的iOS 3.2应用程序没有出现这个问题。我正在将我的一个iPodtouch升级到iOS4.2,看看问题是否已经解决。(在任何情况下,我仍然在寻找解决方案,因为4.1上的iPod.app没有表现出这种行为。)这个问题似乎在iOS 4.2中得到了解决,但如果有人有早期版本的解决方案,我仍然感兴趣。我在4.2.1上遇到了类似的问题,我的MPVolumeView并不总是可见的,但会在屏幕上点击时显示和隐藏。首次加载“我的曲目视图”时,音量视图不可见,系统音量叠加显示以响应音量按钮的更改。显示MPVolumeView后,卷覆盖将不再显示(无论MPVolumeView随后是否隐藏),直到视图从视图中删除并再次添加。
- (void)setVolume:(float)Level
{

   OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level);

   if (errorMsg) {
      NSLog(@"%d", errorMsg);
   }

}