web-dev-qa-db-ja.com

MPVolumeViewスライダーでボリュームを調整している間、デバイスのボリュームHUDビューを非表示にします

私はiPadアプリケーションでMPMoviePlayerを使用してビデオプレーヤーを実装し、ボリュームコントロールにMPVolumeViewを使用していました。私の問題は、ボリュームビューをスクロールしてボリュームを調整すると、下のスクリーンショットのようにデバイスのボリュームハッドオーバーレイが表示されることです。

enter image description here

このシステムボリュームインジケーターhudを無効にするにはどうすればよいですか?私のコードは:

@property (weak, nonatomic) IBOutlet MPVolumeView *playbackMPVolumeView;

//Customizing controller
- (void)customizeVolumeController
{
    _playbackMPVolumeView.showsRouteButton  = YES;
    _playbackMPVolumeView.showsVolumeSlider = YES;
    [_playbackMPVolumeView setVolumeThumbImage:[UIImage imageNamed:@"volume_slider_thumb.png"] forState:UIControlStateNormal];
}
15
Alex Andrews

Swift

let volumeView = MPVolumeView(frame: .zero)
view.addSubview(volumeView)
9
dimo hamdy

ここに解決策があります

CGRect frame = CGRectMake(-1000, -1000, 100, 100);
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:frame];
[volumeView sizeToFit];
[self.view addSubview:volumeView];
6
Hardik Thakkar
- (void) viewDidLoad 
{
    [super viewDidLoad];
    MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame: CGRectZero];
    [self.view addSubview: volumeView];
    ...
}

アプリケーションミュージックプレーヤーのボリューム通知 からこの参照を取得

5
Sourabh Sharma

すべてのアプリ画面でHUDを非表示にする場合は、次のユニバーサルコードを使用します。

static let mpVolumeView = MPVolumeView()
static func setupHiddenMPVolume(_ view: UIView){
    if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window {
        mpVolumeView.alpha = 0.000001
        window.addSubview(mpVolumeView)
    }
}

あるポイントでボリュームHUDを表示する必要がある場合は、app.windowから削除してください。楽しい :-)

4
Vitaliy A

私が思いついた最良の解決策Swift 4

import MediaPlayer

これらの3行のコードを追加します

    let volumeView = MPVolumeView(frame: .zero)
    volumeView.clipsToBounds = true
    view.addSubview(volumeView)
3
Foti Dim

AppDelegate:

self.window?.insertSubview(MPVolumeView(), at: 0)
3

MPVolumeViewインスタンスを表示する場所にこれらの行を追加するだけです。例:音量調節ボタンがある場合

-(void)toggle
{
   self.volumeView.hidden = !self.volumeView.hidden;
   [self.volumeView willMoveToSuperview:self.volumeView.superview];
   [self.volumeView didMoveToSuperview];
}

常に表示されるボリュームスライダーがある場合(MPVolumeViewのインスタンス)。

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    self.volumeView.hidden = NO;
    [self.volumeView willMoveToSuperview:self.volumeView.superview];
    [self.volumeView didMoveToSuperview];

}
0
Umair

これは私にとって実際に機能したものです。何らかの理由で、CGRectがCGRect.zeroの場合、左上隅にボタンがあると機能しません...したがって、これは機能しました:

let volumeView = MPVolumeView(frame: CGRect.init(x: self.view.frame.maxX, y: self.view.frame.maxY, width: 0, height: 0))
volumeView.clipsToBounds = true
volumeView.showsRouteButton = false
self.view.addSubview(volumeView)
0
Daniel Illescas

これがSwiftでの上記の解決策です。 Swift 2-3で動作します。

let frame = CGRect(x: -1000, y: -1000, width: 100, height: 100)
let volumeView = MPVolumeView(frame: frame)
volumeView.sizeToFit()
self.view!.addSubview(volumeView)
0
Jerland2

ビデオやコンテンツを再生せずにHUDを非表示にしたい場合は、これを追加することを忘れないでください。

 try! AVAudioSession.sharedInstance().setActive(true, options: [])
 try! AVAudioSession.sharedInstance().setCategory(.ambient, mode: .default, options: [])

次に、これらの行が機能します。

let frame = CGRect(x: -1000, y: -1000, width: 100, height: 100)
let volumeView = MPVolumeView(frame: frame)
volumeView.sizeToFit()
self.view.addSubview(volumeView)
0
arnoapp

以下のコードは、MPVolumeViewをサブビューとして追加する以外に機能します。

AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionSetActive(YES);
0
aios

ボリュームオーバーレイを無効にするには、次の手順を実行する必要がありました。

AppDeletage.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ...

  // disable volume hud
  CGRect rect = CGRectMake(-500, -500, 0, 0);
  MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:rect];
  [self.window addSubview:volumeView];
  return YES;
}

AppDelegate.h:

@interface AppDelegate : UIResponder <UIApplicationDelegate>

...
@property (nonatomic, strong) MPVolumeView   * volumeView;

@end

Objective Cのみ、Swiftはありません。 iOS 8.1以降で動作します(以前のバージョンではテストされていません)。コンテキストなしで与えられた回答に基づいてこれを実装するのに苦労したので、これを追加します。

0
Lars Graubner

これは私のために働きます。

MPVolumeView *volumeView2 = [[MPVolumeView alloc] initWithFrame:CGRectMake(-28, -2, 24, 24)];
[self.view addSubview:volumeView2];
volumeView2.showsVolumeSlider = true;
volumeView2.showsRouteButton = false;
_videoPlayer.AllowsAirPlay = false;
0
Devendra Kamal

アプリ全体でMPVolumeSettingsAlertを無効にする場合は、次の行をAppDelegateのdidFinishLaunchingWithOptionsに追加します。

self.window?.insertSubview(MPVolumeView(), at: 0)

1つのViewControllerで無効にする必要がある場合は、次の行を特定のViewControllerのviewDidLoad()に追加します。

self.view.insertSubview(MPVolumeView(), at: 0)
0
redribben