自定义 iPhone 振动强度

2023-11-24

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

这是从 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"intvalue 不起作用,我不知道如何查看内部AudioServicesPlaySystemSoundWithVibration方法来弄清楚。我必须向它传递什么才能真正改变强度? 现在,无论我通过 1、1000、0.4 还是 0.0001,它总是相同的强度(在装有 iOS7 的 iPhone 4 上)。任何人都可以重现这个吗?

我希望不仅能够创建振动模式,而且能够创建平滑的振动包络线。How to?


(由于这是一个仪器设计的研究项目,我(还)不关心应用商店的限制。)


改变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
}

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

@[@(2000), @(1000), @(1000), @(500)]

将执行示例代码所做的操作。在这种情况下,它将启动 2000 毫秒,停止 1000 毫秒,启动 1000 毫秒,停止 500 毫秒。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义 iPhone 振动强度 的相关文章

随机推荐