啦啦啦,先给大家拜个晚年,有时间把之前优化的小功能总结下,这个demo是仿照Snapchat的短按音量键拍照长按录制。首先呢我先谢谢Github上的作者(四年前的老工程 用的mrc 有些方法已经废弃了,看到黄色的提示我就闹心。。。。但是思路是很好的)我是在其基础上做了些优化,增加了长按喝短按的判断,回调了三个方法,分别是:
1.短按。-(void) volumeButtonCameraClick:(MPVolumeObserver *) button
2.长按开始。-(void) volumeButtonStarVideoClick:(MPVolumeObserver *) button
3.长按结束。-(void) volumeButtonEndVideoClick:(MPVolumeObserver *) button
具体录制和拍照就靠大家自己喽 😊,整体简单,使用比较方便,算是给自己巩固一下,也希望可以帮到大家。
核心就是通过通知监听音量变化:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(volumeChangeNotification:)name:@"SystemVolumeDidChange" object:nil];
当volumeChangeNotification:方法被调用时,我们需要判断是短按还是长按。因为当长按的时候观察输出,如下:
当长按的时,第一条数据和第二条数据间隔为0.6秒 之后间隔都是0.1秒,通过间隔时间去判断是长按还是短按(判断处会比较恶心具体的可以看下面demo)。
还有些细节上的:
1.当程序推到后台需要把通知移除掉,当程序回到前台的时候需要添加通知。
2.在修改声音前需要先记录音量大小,当音量改变的时候让其随时回到初始音量,不然的话长按音量键会使音量持续变化影响拍摄。
3.最后再说下如果录制拍摄时需要以第三方APP做背景音乐的话(例如录制视频时需要使用网易音乐做背景时) 需要[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers error:nil];进行配合。
2019.4.11
完善之前代码中视频录制和拍照的检测原理。之前说的每条数据间隔是0.1秒,这个说法是有问题的,真想抽自己,上面的我也不改了,给自己个提醒,具体的说0.103287 ~ 0.106338秒 ,因为之前项目需求时间不长,所以0.1的话没有发现问题。
最后上Demo 如果帮到您 请给颗星哦,如果哪里有问题请指出😄。