自定义实现MPVolumeView音量控件
2014-04-18 17:14
351 查看
http://blog.csdn.net/theonezh/article/details/8158420 http://www.cnblogs.com/cate/ios/ http://www.cnblogs.com/pinping/archive/2012/10/12.html http://www.cnblogs.com/entlibforum/archive/2012/10/16/2725411.html http://www.cocoachina.com/applenews/devnews/2012/1114/5085.html
http://mobilesolutions.blog.163.com/blog/static/189224176201111725559550/
在ios中可以使用MPVolumeView来调节音量,缺点是UI是固定的,而且静音的时候会显示“No Volume Available”。自定义的volume view能避免这些问题。
自定义的volume view的UI部分比较好实现,在这里主要谈下静音键和音量键事件的处理。
判断是否静音:
发现,SDK中确实有设置system volume的方法,是一个private class,官方不允许使用,所以就算你用了,苹果的审核也不会通过,因为标明了,那个是私有的类!
还有人提到MPVolumeView,这个可以,但是这个的实现,是在屏幕中创建一个音量条,来取代原来按侧边键出来的大喇叭。
是可以达到同步设置的。但是音量只能由用户手动拖动音量条控制。
附上简单的使用代码,因为我是在cocos2d里面试的,所以就加到window里面了。
MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:window.bounds] autorelease];
[window addSubview:volumeView];
[volumeView sizeToFit];
我找了一下,发现一个类,就是MPMusicPlayerController。我们用来播放音乐的。MPVolumeView应该算是其中的一个组件吧。
这个类有一个值,volume~可以直接设置,而且,最总要的是,他可以同步系统音量,且不会显示出来。
用法很简单。
MPMusicPlayerController *mpc = [MPMusicPlayerController applicationMusicPlayer];
mpc.volume = 0; //0.0~1.0
用这个方法可以绕过那些麻烦的底层控制,用官方写好的东西,达到我们要的效果。
大家试试看,看看行不行~
http://mobilesolutions.blog.163.com/blog/static/189224176201111725559550/
在ios中可以使用MPVolumeView来调节音量,缺点是UI是固定的,而且静音的时候会显示“No Volume Available”。自定义的volume view能避免这些问题。
自定义的volume view的UI部分比较好实现,在这里主要谈下静音键和音量键事件的处理。
判断是否静音:
- (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 = [mediaVolume 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 }
修改系统音量(SystemVolume)的方法
看到很多朋友在问能不能修改系统的音量,所以我也去找了一下。发现,SDK中确实有设置system volume的方法,是一个private class,官方不允许使用,所以就算你用了,苹果的审核也不会通过,因为标明了,那个是私有的类!
还有人提到MPVolumeView,这个可以,但是这个的实现,是在屏幕中创建一个音量条,来取代原来按侧边键出来的大喇叭。
是可以达到同步设置的。但是音量只能由用户手动拖动音量条控制。
附上简单的使用代码,因为我是在cocos2d里面试的,所以就加到window里面了。
MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:window.bounds] autorelease];
[window addSubview:volumeView];
[volumeView sizeToFit];
我找了一下,发现一个类,就是MPMusicPlayerController。我们用来播放音乐的。MPVolumeView应该算是其中的一个组件吧。
这个类有一个值,volume~可以直接设置,而且,最总要的是,他可以同步系统音量,且不会显示出来。
用法很简单。
MPMusicPlayerController *mpc = [MPMusicPlayerController applicationMusicPlayer];
mpc.volume = 0; //0.0~1.0
用这个方法可以绕过那些麻烦的底层控制,用官方写好的东西,达到我们要的效果。
大家试试看,看看行不行~
相关文章推荐
- 自定义实现MPVolumeView音量控件
- 自定义实现MPVolumeView音量控件
- 自定义实现MPVolumeView音量控件
- Android自定义View之组合控件实现类似电商app顶部栏
- 【Android学习】自定义View的实现----以圆形图片控件为例
- Android进阶——自定义View之重写ViewGroup组合系统控件实现自定义ToolBar模板
- 利用系统控件集合实现自定义view(自定义菜单)
- 自定义view,仿微信、支付宝密码输入控件的源码实现
- 实现轮转广告带底部指示的自定义ViewPager控件
- 自定义View实现水平滚动控件
- 自定义ViewGroup实现控件自动换行
- 安卓中自定义view控件代替radiogroup实现颜色渐变效果的写法
- IOS自定义View实现相应的控件点击方法以及代理的总结(附代码)
- 如何实现类似水平WheelView的自定义滑动控件
- Android自定义View 简单实现多图片选择控件
- 自定义View实现水平滚动控件
- 自定义View实现水平滚动控件
- 简单实现自定义View控件圆形进度条
- Android自定义View控件实现多种水波纹涟漪扩散效果
- Android实战简易教程<三十三>(自定义View实现控件晃动提示效果)