我编写了一个Quick Look插件,尝试播放这样的音乐:
OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options)
{
NSURL *fileURL = (__bridge NSURL*)url;
AudioPlayer *player = // load player with fileURL
// Create a semaphore
sema = dispatch_semaphore_create(0);
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
// Start playback and signal the semaphore once finished
[player play:^{
dispatch_semaphore_signal(sema);
}];
// Wait here until the player completion block signals the semaphore to stop waiting
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
NSLog(@"%@", @"done!");
return kQLReturnNoError;
}
由于各种原因,将这些音频文件转码为macOS可以识别的格式对我来说是不切实际的,否则我可以将OS的MP3文件交给操作系统并为我播放该文件。因此,我改为使用带有信号灯的肮脏的程序来停止执行,以使播放器对象保持在原处,否则,它将在开始播放后立即停止。
问题在于,由于“快速查找”进程仍在运行,因此“快速查找”面板停止预览后,该文件将仅继续播放。
有没有办法像解散系统插件一样停止播放?
答案 0 :(得分:0)
您是否尝试过使用以下委托方法:
根据Apple文档:
func PreviewControllerWillDismiss(QLPreviewController) 在关闭预览控制器之前调用。 func PreviewControllerDidDismiss(QLPreviewController) 关闭预览控制器后调用。