博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义实现MPVolumeView音量控件
阅读量:4111 次
发布时间:2019-05-25

本文共 1742 字,大约阅读时间需要 5 分钟。

 

在ios中可以使用MPVolumeView来调节音量,缺点是UI是固定的,而且静音的时候会显示“No Volume Available”。自定义的volume view能避免这些问题。

自定义的volume view的UI部分比较好实现,在这里主要谈下静音键和音量键事件的处理。

注:使用前需要添加头文件 #import <MediaPlayer/MediaPlayer.h>

判断是否静音:(该方法在ios5中被取消了)

- (BOOL)isMuted{
CFStringRef route;UInt32 routeSize = sizeof(CFStringRef); OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &routeSize, &route);if (status == kAudioSessionNoError){
if (route == NULL || !CFStringGetLength(route))return TRUE;} return FALSE;} 监听静音键: - (BOOL)addMutedListener{
OSStatus s = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,audioRouteChangeListenerCallback,self);return s == kAudioSessionNoError;}回调函数: void audioRouteChangeListenerCallback (void *inUserData,AudioSessionPropertyID inPropertyID,UInt32 inPropertyValueSize,const void *inPropertyValue){
if (inPropertyID != kAudioSessionProperty_AudioRouteChange) return;BOOL muted = [self isMuted];// add code here} 设置和获取音量: - (float)volume{
return [[MPMusicPlayerController applicationMusicPlayer] volume];} - (void)setVolume:(float)newVolume{
[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];} 监听音量键: - (BOOL)addHardKeyVolumeListener{
OSStatus s = AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume,audioVolumeChangeListenerCallback,self);return s == kAudioSessionNoError;} 音量键回调函数: void audioVolumeChangeListenerCallback (void *inUserData,AudioSessionPropertyID inPropertyID,UInt32 inPropertyValueSize,const void *inPropertyValue){
if (inPropertyID != kAudioSessionProperty_CurrentHardwareOutputVolume) return;Float32 value = *(Float32 *)inPropertyValue;MediaVolume *mediaVolume = (MediaVolume *)inUserData;// add code here}

转载地址:http://iiosi.baihongyu.com/

你可能感兴趣的文章
推荐:vue解决引入外部css问题和解决css引入背景问题
查看>>
vue.js页面加载数据时加载动画过渡效果
查看>>
推荐Node.js跨域问题实用解决方法
查看>>
初始化一个React项目create-react-app
查看>>
npm安装json-stable-stringify使用
查看>>
react 解决警告Warning: Each child in a list should have a unique “key” prop.
查看>>
安装react初始化项目报错 :无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\create-react-app.ps1,因为在此系统上禁止运行
查看>>
babel-plugin-import配置babel按需引入antd模块
查看>>
浏览器对ES6新语法支持兼容处理
查看>>
ajax请求中自定义添加请求头token两种方式
查看>>
前端常用加密处理vue使用md5加密
查看>>
vue 前端常用加密处理 md5 加密
查看>>
Vue前端常用加密处理base64加密解密
查看>>
VUE前端常用加密处理des加密和解密
查看>>
nodemon代替node自动重启项目
查看>>
react 解决重命名生命周期componentWillMount
查看>>
vs code编写react代码 jsx中html标签Tab键自动补全
查看>>
vue.js限制输入框只能输入整数不含小数点
查看>>
字符串数组初始化转化
查看>>
表单提交enter触发提交
查看>>