繁体   English   中英

通过自定义插件使用iOS ReplayKit和Unity 5.3.4时无法关闭PreviewViewController

[英]Unable to Dismiss the PreviewViewController when Using iOS ReplayKit with Unity 5.3.4 via Custom Plugin

我试图使用ReplayKit的原生屏幕录制功能以及我的Unity应用程序,这样我就可以享受本机屏幕录制和共享UI的好处。

我创建了一个Unity插件,它调用我用Objective-C(++)编写的本机代码,在解除RPPreviewViewController之前,一切似乎都RPPreviewViewController

因此,我在Unity UI中的记录按钮触发ReplayKit startRecordingWithMicrophoneEnabled:handler函数,并且stop按钮正确调用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;
}

我在尝试了几件事之后终于对它进行了排序,但我认为问题在于我是如何设置previewControllerDelegate

previewController.previewControllerDelegate = self;

并且已经改变它使用

[previewController setPreviewControllerDelegate:self];

这似乎工作!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM