1

我正在尝试将 ReplayKit 的本机屏幕录制功能与我的 Unity 应用程序一起使用,以便我可以享受本机屏幕录制和共享 UI 的好处。

我创建了一个 Unity 插件,它调用我用 Objective-C(++) 编写的本机代码,一切似乎都运行良好,直到关闭RPPreviewViewController.

所以我在 Unity UI 中的录制按钮触发了 ReplayKitstartRecordingWithMicrophoneEnabled:handler函数,并且停止按钮正确调用了 stopRecording 函数,该函数将RPPreviewViewController实例返回给我的处理程序。

在 中RPPreviewViewController,“保存”按钮正确保存到相机胶卷,共享按钮按预期工作。但是点击“取消”(或“完成”取决于上下文)什么也不做。

这是我的stopRecordingWithHandler:函数中处理的代码RPPreviewViewController

 - (void) stopRecording {

     [[RPScreenRecorder sharedRecorder] stopRecordingWithHandler:^(RPPreviewViewController *previewController,NSError *error){
     if (previewController != nil) {

         previewController.previewControllerDelegate = self;

         [previewController willMoveToParentViewController:rootView];

         [rootView addChildViewController:previewController];

         previewController.view.frame = CGRectMake(0.0, 0.0, rootView.view.bounds.size.width, rootView.view.bounds.size.height);

         [rootView.view addSubview:previewController.view];

         self.presentedController = previewController;

     } else {
         NSString *msg = [NSString stringWithFormat:@"The screen recorder is unavailable:\n%@", [error localizedDescription]];
         [self displayMessageDialog:msg];
     }
 }];
}

// Implementation of PreviewControllerDelegate protocol
- (void)previewControllerDidFinish:(RPPreviewViewController *)previewController {

    [previewController willMoveToParentViewController:nil];

    [previewController.view removeFromSuperview];

    [previewController removeFromParentViewController];

    self.presentedController = nil;

}

如您所见,我已经实现了协议RPPreviewViewControllerDelegate并尝试关闭其关闭事件的视图,但从未调用委托函数。

我不知道出了什么问题,是我编码错误还是与 Unity 一起使用时存在错综复杂的问题?

我被卡住了,所以任何指针都会非常感激!

更新: rootView在上面的代码中使用,所以这是我在init函数中检索该引用的方式:

static UIViewController *rootView;

- (ReplayKitController*) init {
    self = [super init];

    if(self && rootView == nil) {
        rootView = [[UIApplication sharedApplication] windows][0].rootViewController;
    }

    return self;
}
4

1 回答 1

0

在尝试了几件事后,我终于对其进行了排序,但我相信问题在于我如何设置previewControllerDelegatewith

previewController.previewControllerDelegate = self;

并已将其更改为使用

[previewController setPreviewControllerDelegate:self];

这似乎有效!

感谢所有查看我的问题的人,我希望这对那里的人有所帮助!

于 2016-10-06T10:44:18.427 回答