Ios CHHapticEngine:播放后正确停止引擎

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"

我试图用以下代码从文件中播放触觉“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:
无法触发任何触觉