定制iPhone震动的强度

这是一个与在iOS中是否有API自定义振动相关的问题? 。 我能够创build自定义振动模式,但无法控制强度。

这是从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,它是一样的强度(iOS 7上的iPhone 4)。 任何人都可以重新创build?

我希望不仅能够创build振动模式,而且还能够形成平滑的振动包络。 如何?


(因为这是一个仪器devise的研究项目,所以我还没有关注App Store的限制。)

改变numberWithInt调用numberWithFloat ,并改变强度,所以它介于0和1之间。我认为这是奇怪的,当他们使用一个int而不是一个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)] 

将做什么样的代码做。 在这种情况下,它将启动2000毫秒,停止1000毫秒,启动1000毫秒,停止500毫秒。

stop被称为停止声音。 我已经设置了它的方式,它会停止发送总时间后的声音。

你可能已经注意到我一直在使用数组/数字文字而不是使用[NSArray arrayWithObjects: ... , nil];[NSNumber numberWith...]; 。 这使得你的代码缩短了很多。 另外,我用#pragma mark开始#pragma mark 。 用它来更好地组织它。 希望能帮助到你!