通过自定义插件将 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
.[=22= 之前一切似乎都运行良好]
所以我在 Unity UI 中的录制按钮触发了 ReplayKit startRecordingWithMicrophoneEnabled:handler
函数,停止按钮正确调用了停止录制函数 returns 我的 RPPreviewViewController
实例处理程序。
在 RPPreviewViewController
中,"Save" 按钮正确保存到相机胶卷并且共享按钮按预期工作。但是点击 "Cancel"(或 "Done" 取决于上下文)什么都不做。
这是我的 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];
这似乎有效!
感谢所有检查我的问题的人,我希望这对那里的人有所帮助!
我正在尝试将 ReplayKit 的本机屏幕录制功能与我的 Unity 应用程序一起使用,以便我可以享受本机屏幕录制和共享的好处 UI。
我创建了一个 Unity 插件,它调用我用 Objective-C(++) 编写的本机代码,在关闭 RPPreviewViewController
.[=22= 之前一切似乎都运行良好]
所以我在 Unity UI 中的录制按钮触发了 ReplayKit startRecordingWithMicrophoneEnabled:handler
函数,停止按钮正确调用了停止录制函数 returns 我的 RPPreviewViewController
实例处理程序。
在 RPPreviewViewController
中,"Save" 按钮正确保存到相机胶卷并且共享按钮按预期工作。但是点击 "Cancel"(或 "Done" 取决于上下文)什么都不做。
这是我的 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];
这似乎有效!
感谢所有检查我的问题的人,我希望这对那里的人有所帮助!