iPhone 本体の音量を変更する その2
前回は結局 Private API を使うとできるという話になってしまったので今回は正攻法で。
MPVolumeView
を使う。
UIが提供されるのみで programmatically に設定はできない。
UIはこんな感じ。
分かりやすく以下のコードで border を描画している。
view.layer.borderColor = [UIColor colorWithWhite:0.0 alpha:0.2].CGColor; view.layer.borderWidth = 1;
注意点は2つ
- Apple TVなどへ接続するためのスライダーの右側の routeButton が白色なので、背景が白色のViewに置くとボタンが見えない。
背景白色Viewに置きたければ以下のメソッドで画像を変更する。
- (void)setRouteButtonImage:(UIImage *)image forState:(UIControlState)state NS_AVAILABLE_IOS(6_0);
- border の線から分かるように、スライダーのThumb画像がViewの frame からはみ出してしまっている。
MPVolumeView
を乗せるViewがclipToBounds = YES
でMPVolumeView
ギリギリ分のサイズだった場合に、スライダーのThumbがクリップされてしまう。
また、MPVolumeView
をツメツメでレイアウトした場合もMPVoumeView
の真上に来るViewとの階層関係によってはThumb画像が隠れてしまう恐れがある。
以下のメソッドでThumb画像を変更するか、レイアウトを気を付けるかして対応する必要がある。
- (void)setVolumeThumbImage:(UIImage *)image forState:(UIControlState)state NS_AVAILABLE_IOS(6_0);
MPVolumeView
をUIに配置するのではなく、MPVolumeView
付きの Alert を呼び出す function がある。
MP_EXTERN void MPVolumeSettingsAlertShow(); MP_EXTERN void MPVolumeSettingsAlertHide(); MP_EXTERN BOOL MPVolumeSettingsAlertIsVisible();
iOS 2.0から存在しているらしいけどこれ初めて見た。
UIには呼び出しボタンを置くだけで済むので場所を取らなくて良いかも。
追記
MP_EXTERN void MPVolumeSettingsAlertShow(); MP_EXTERN void MPVolumeSettingsAlertHide(); MP_EXTERN BOOL MPVolumeSettingsAlertIsVisible();
上記3つの関数は iOS 11.3 β で deprecated になりました。