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

时间:2010-10-02 10:08:47

标签: iphone uiview volume

如果您按下音量增大/减小硬件按钮,有没有办法阻止显示音量指示器视图?

仅限演示应用程序。因此该方法不需要是App Store安全的。

3 个答案:

答案 0 :(得分:4)

它的工作原理如下:

  • 播放无声文件
  • 将卷视图添加到主视图
  • 将视图发送回来

e.g

 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];

答案 1 :(得分:2)

IIRC,MPVolumeView的存在会禁止显示音量指示符叠加。尝试坚持相关视图,看看是否是这种情况。

然后你可以尝试各种技巧使其有效隐形:

  • 隐藏(或隐藏超级视图)。
  • 将其alpha(或superview的alpha)设置为0或0.01,左右。
  • 将其移出屏幕
  • 几乎在屏幕外移动(例如屏幕上只有左上角的像素)
  • 坚持另一种观点。
  • 将其粘贴在子视图中,其中clipsToBounds = ON,并将其移到这些边界之外
  • 将volumeView.layer.mask设置为新的(因此完全透明的)CALayer。设置volumeView.userInteractionEnabled = NO。

所有这些理论上都可以通过MPVolumeView检测到,但我怀疑它们中的一些会起作用。

答案 2 :(得分: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
   }
}