有些应用会需要我们隐藏系统的音量 HUD 提示框,之前我们都是用 "MPMusicPlayerController" 来进行隐藏,但在iOS7.0之后我们发现可以使用 “MPVolumeView” 来进行系统音量的自定义了,来来一起使用看看吧。
2016-09-08 MPVolumeView是什么?
MPVolumeView是Media Player Framework中的一个UI组件,直接包含了对系统音量和Airplay设备的音频镜像路由的控制功能。其中包含一个MPVolumeSlider的子视图用来控制音量。这个MPVolumeSlider是一个私有类,我们无法手动创建此类,但这个类是UISlider的子类。MPVolumeView的使用很简单,只需要将其加入到一个父视图中,给予父视图合适的大小,再创建MPVolumeView示例,将其加入到父视图中即可。
网上有人总结了两个缺点我们也列出来:
1.UI可定制的的程度低。 MPVolumeView只提供了有限的几个方法来定制其中的Slider和Route Button的样式,而且基本上只能靠换图片解决。如果你想把Slider操作换成Button或者其他的UI组件,那是不可能的。2.没有额外的音量控制API。 目前为止没有发现iOS的公开API中有可以直接操作系统音量的,所以修改系统音量只能使用这个UI组件。
如果还想给UI加入手势操作来控制音量,这种直接使用MPVolumeView是做不到的,你需要用到MPVolumeSlider来实现。
------------------------------------------------------------------------------------------
老样子直接上代码(注释都写好了呦~)
//
// ViewController.m
// MPVolumeViewExe
//
// Created by a111 on 16/8/25.
// Copyright © 2016年 司小文. All rights reserved.
//
#import "ViewController.h"
#import <MediaPlayer/MediaPlayer.h>
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];
self.title = @"音量";
//自定义MPVolumeView 高度不能改变其他都可以
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(10, 200, 300, 100)];
//把自定义的MPVolumeView贴在view上
[self.view addSubview: volumeView];
//寻找建立UISlider;
UISlider* volumeViewSlider = nil;
//设置音量大小
volumeViewSlider.value = 0.7;
for (UIView *view in [volumeView subviews]){
if ([view.class.description isEqualToString:@"MPVolumeSlider"]){
volumeViewSlider = (UISlider*)view;
volumeViewSlider.backgroundColor = [UIColor yellowColor];
break;
}
}
//改变拖动条的图片
[volumeViewSlider setThumbImage:[UIImage imageNamed:@"img_Zbar_BarcodeSele_00@2x.png"] forState:UIControlStateNormal];
//改变拖动条的颜色,图片和颜色同时只能存在一个
// volumeViewSlider.thumbTintColor = [UIColor orangeColor];
volumeViewSlider.minimumTrackTintColor = [UIColor redColor];
volumeViewSlider.maximumTrackTintColor = [UIColor blueColor];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
这中间还用到了 "UISlider" 的使用可以看我之前写的博客
http://blog.youkuaiyun.com/siwen1990/article/details/48446407
当然如果你只需要隐藏音量提示框,那么直接自己改变下frame就好了
//自定义MPVolumeView 高度不能改变其他都可以
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(-100, 0, 10, 10)];
//把自定义的MPVolumeView贴在view上
[self.view addSubview: volumeView];
另外这次的demo一样是放在了云盘
https://yunpan.cn/cMx3CuLyRnSfn (提取码:5262)
感谢观看,学以致用更感谢!