ReplayKit のネイティブ画面記録機能を Unity アプリと一緒に使用して、ネイティブ画面記録と共有 UI の利点を享受できるようにしようとしています。
Objective-C(++) で記述されたネイティブ コードを呼び出す Unity プラグインを作成しましたRPPreviewViewController
。
したがって、Unity UI の録音ボタンは ReplayKit 関数をトリガーし、停止ボタンはインスタンスをハンドラーに startRecordingWithMicrophoneEnabled: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
し、 is closed イベントでビューを閉じようとしましたが、デリゲート関数が呼び出されていません。
何が問題なのかわかりません。コーディングが間違っているのでしょうか、それとも Unity で使用する際に複雑な問題があるのでしょうか?
私は立ち往生しているので、どんなポインタでも大歓迎です!
UPDATE:
は上記のコードで使用されているため、関数rootView
でその参照を取得する方法は次のとおりです。init
static UIViewController *rootView;
- (ReplayKitController*) init {
self = [super init];
if(self && rootView == nil) {
rootView = [[UIApplication sharedApplication] windows][0].rootViewController;
}
return self;
}