现在的位置: 首页 > 综合 > 正文

使用AudioServices相关接口(底层c接口)的连续震动实现(ios)

2018年01月25日 ⁄ 综合 ⁄ 共 937字 ⁄ 字号 评论关闭

 废话不多说,先上接口

AudioServicesAddSystemSoundCompletion(kSystemSoundID_Vibrate, NULL, NULL, systemAudioCallback, NULL);

AudioServicesRemoveSystemSoundCompletion(kSystemSoundID_Vibrate); 

这两个接口的用途是绑定和取消指定soundID对应的回调方法;kSystemSoundID_Vibrate为soundID类型,其回调方法认准的也是这个soundID,在任何地方使用这个id去执行AudioServicesPlaySystemSound(xxxSoundID)都会调用到该回调方法。而一旦调用remove方法取消回调,同样的在任何地方使用这个id去执行AudioServicesPlaySystemSound(xxxSoundID)都不会调用到这个回调。说的这么绕,其实就是说这俩接口的影响是全局的,威力很大。

我们只要在回调方法里面再调用AudioServicesPlaySystemSound接口,就可以实现连续震动了;当我们想要停止震动时,调用remove接口,ok,回调方法就歇火了。

优化:

经过测试发现震动之间太连续,体验不符合要求;所以我们在c回调里面通过单例(全局变量性质的指针)调用到oc的方法进行[self performSelector:@selector(triggerShake) withObject:nil afterDelay:1](triggerShake是震动接口);在停止震动时候我们需要调用 

[NSObject cancelPreviousPerformRequestsWithTarget:self
                                             selector:@selector(triggerShake)
                                               object:nil];  停止之前可能的回调;这两个方法的成对使用既好用又简便,对于需要定时调用的场景很适合,也免去维护定时器的麻烦。
   

抱歉!评论已关闭.