自定义iPhone振动的强度

时间:2013-11-06 20:37:19

标签: ios iphone iphone-privateapi vibrate iphone-vibrate

这是与Are there APIs for custom vibrations in iOS?相关的问题。 我能够创建自定义振动模式,但无法控制强度。

这是从Kevin Cao的答案中复制的,它可以实现自定义振动模式:

NSMutableDictionary* dict = [NSMutableDictionary dictionary];
NSMutableArray* arr = [NSMutableArray array ];

[arr addObject:[NSNumber numberWithBool:YES]]; //vibrate for 2000ms
[arr addObject:[NSNumber numberWithInt:2000]];

[arr addObject:[NSNumber numberWithBool:NO]];  //stop for 1000ms
[arr addObject:[NSNumber numberWithInt:1000]];

[arr addObject:[NSNumber numberWithBool:YES]];  //vibrate for 1000ms
[arr addObject:[NSNumber numberWithInt:1000]];

[arr addObject:[NSNumber numberWithBool:NO]];    //stop for 500ms
[arr addObject:[NSNumber numberWithInt:500]];

[dict setObject:arr forKey:@"VibePattern"];
[dict setObject:[NSNumber numberWithInt:1] forKey:@"Intensity"];


AudioServicesPlaySystemSoundWithVibration(4095,nil,dict);

使用@"Intensity"值添加键int的代码行不起作用,我不知道如何查看AudioServicesPlaySystemSoundWithVibration方法来计算它出。我有什么要传递给它以便实际改变强度? 现在,如果我传递1,1000,0.4或0.0001并不重要,它总是相同的强度(在带有iOS7的iPhone 4上)。 任何人都可以重新创建吗?

我希望不仅能够创建振动模式,还能够创建平滑的振动包络。 如何?


(由于这是一个关于仪器设计的研究项目,我(尚未)关注App Store的限制。)

1 个答案:

答案 0 :(得分:3)

border-bottom-color调用更改为.hvr-bubble-float-top:hover:before,然后更改强度,使其介于0和1之间。我认为使用#contact-form > .contact-submit > .hvr-bubble-float-top:hover:before, #contact-form > .contact-submit > .hvr-bubble-float-top:focus:before, #contact-form > .contact-submit > .hvr-bubble-float-top:active:before { … border-bottom-color: red; } 而不是{{1}时很奇怪}。

编辑:这是一个复制/粘贴,应该适用于您的代码调用自定义振动:

numberWithInt

对于numberWithFloat,它应该在开始时间和停止时间之间交替。传入这个数组:

int

将执行示例代码所做的事情。在这种情况下,它将启动2000 ms,停止1000 ms,启动1000 ms,并停止500 ms。

调用

float来停止声音。我设置它的方式,它会在发送总时间后停止发声。

你可能已经注意到我一直在使用数组/数字文字,而不是使用#pragma mark - Custom vibration methods -(void)invokeCustomVibrationWithStartStopTimes:(NSArray*)startStopTimes andIntensity:(float)intensity { BOOL startOrStop = YES; NSMutableArray* arr = [@[] mutableCopy]; double time = 0; for (NSNumber *x in stopStartTimes) { [arr addObject:x] startOrStop = !startOrStop; [arr addObject:@(startOrStop)]; time = [x doubleValue] / 1000.0; } AudioServicesPlaySystemSoundWithVibration(4095,nil,{@"VibePattern":arr,@"Intensity":@(intensity)}) [self performSelector:@selector(stop) withObject:nil afterDelay:time]; } -(void)stop { AudioServicesStopSystemSound(4095); // stop buzzing the phone } startStopTimes。这使您的代码缩短了很多。另外,我用@[@(2000), @(1000), @(1000), @(500)] 标记了开头。用它来更好地组织它。希望它有所帮助!