Ios CHHapticEngine:播放后正确停止引擎
我试图用以下代码从文件中播放触觉“AHAP”模式:Ios CHHapticEngine:播放后正确停止引擎,ios,objective-c,Ios,Objective C,我试图用以下代码从文件中播放触觉“AHAP”模式: __strong static CHHapticEngine *engine; engine = [[CHHapticEngine alloc] initAndReturnError:nil]; [engine startAndReturnError:nil]; [engine playPatternFromURL:[NSURL fileURLWithPath:@"/path/to/pattern.ahap"
__strong static CHHapticEngine *engine;
engine = [[CHHapticEngine alloc] initAndReturnError:nil];
[engine startAndReturnError:nil];
[engine playPatternFromURL:[NSURL fileURLWithPath:@"/path/to/pattern.ahap"] error:nil];
触觉确实可以成功播放,但我有一个问题,即每当播放was模式时,键盘上的第一次按键会发出非常响亮的轻弹声音(默认的iOS轻弹声音),然后在第二次按键时恢复正常。我以为是因为发动机仍在工作,所以打了电话
[engine stopWithCompletionHandler:nil];
但是,触觉不再播放(不过,第一次按键时,轻弹声音是正常的)playPatternFromURL:error:
应该同步播放,这意味着它将在执行stopWithCompletionHandler:
()之前完成播放。老实说,我不知道为什么会这样,怎么会这样CoreHaptics
在wild和github中很少实现,除了官方版本,所以我没有有用的参考()
对这个问题有什么想法吗?提前谢谢
编辑:
对于未来的读者,我设法通过在另一个线程中播放来缓解这个问题:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[engine playPatternFromURL:[NSURL fileURLWithPath:@"/path/to/pattern.ahap"] error:nil];
});
也许这是因为在撰写本文时,框架是一个测试版软件
编辑2:
但是,如果您有
CHHapticEventTypeAudioCustom
我使用以下代码设法解决了此问题,则上述缓解措施无法解决此问题:
__strong static CHHapticEngine *engine;
engine = [[CHHapticEngine alloc] initAndReturnError:nil];
[engine startAndReturnError:nil];
[engine playPatternFromURL:[NSURL fileURLWithPath:@"/path/to/pattern.ahap"] error:nil];
[engine notifyWhenPlayersFinished:^CHHapticEngineFinishedAction(NSError * _Nullable error) {
[engine stopWithCompletionHandler:nil];
return CHHapticEngineFinishedActionStopEngine;
}];
似乎每当模式停止播放并停止引擎时,我都需要观察(不是因为框架是测试版软件,我的坏)。但是,对于方法playPatternFromURL:error:
,引用Apple文档:
此方法阻止当前线程上的处理,直到模式
他已经演奏完了
至少在我看来,这并不意味着什么。这就是为什么在playPatternFromURL:error:
之后调用stopWithCompletionHandler:
无法触发任何触觉