iPhone SDK - 如何在按下硬件按钮时禁用音量指示器视图?

5

是否有一种方法可以防止按下音量加/减硬件按钮时显示音量指示器视图?

这仅适用于演示应用程序。因此,该方法不需要符合App Store的安全要求。


1
在回答这个问题之前,你可能需要先采纳一些关于其他问题的答案。 - Tom Irving
3个回答

4
它的工作原理如下:
  • 播放一个静音文件
  • 将音量视图添加到主视图中
  • 将视图发送到后面
例如:
 NSString *url = [[NSBundle mainBundle]
                       pathForResource:@"silent" ofType:@"mp3"];
 MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc]
                       initWithContentURL:[NSURL URLWithString:url]];
 [moviePlayer play];

 MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:
                       CGRectMake(0, 0, 1, 1)] autorelease];
 [self.view addSubview:volumeView]; 
 [self.view sendSubviewToBack:volumeView];

2
据我所知,存在MPVolumeView会抑制音量指示器叠加显示。请尝试将其放在相关视图中并查看是否是这种情况。
然后,您可以尝试各种技巧使其有效地不可见:
- 隐藏它(或隐藏其父视图)。 - 将其alpha(或父视图的alpha)设置为0、0.01等。 - 将其移动到屏幕外。 - 将其几乎移到屏幕外(例如,只有左上角像素在屏幕上)。 - 将其粘贴在另一个视图下面。 - 将其置于带有clipsToBounds=ON的子视图中,并将其移动到这些边界之外。 - 将volumeView.layer.mask设置为新的(因此完全透明的)CALayer。将volumeView.userInteractionEnabled设置为NO。
所有这些理论上都可以被MPVolumeView检测到,但我怀疑其中一些会起作用。

可以确认这一点。MPVolumeView必须可见(苹果似乎真的会检查这一点),然后音量叠加层就不会显示出来。最简单的解决方案似乎是将MPVolumeView移出屏幕(例如,-1000,-1000)。 - DarkDust

1
- (void)viewDidLoad
 {
  [super viewDidLoad];

  //get current volume level
  oldVolume= [[MPMusicPlayerController applicationMusicPlayer] volume];

  //hide volume indicator         
  MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:
                             CGRectMake(0, 0, 1, 1)] autorelease];

  musicController=[MPMusicPlayerController applicationMusicPlayer];
  [self.view addSubview:volumeView];
  [self.view sendSubviewToBack:volumeView];
  [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(volume) userInfo:nil repeats:YES];
}

- (void)volume
{
  if ([musicController volume]>oldVolume || [musicController volume]<oldVolume) {
    [musicController setVolume:oldVolume];
    // do some stuff here and the volume level never changes, just like volume action in camera app
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接