1

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;
}
4

1 に答える 1

0

いくつかのことを試した後、最終的に並べ替えましたが、問題はpreviewControllerDelegatewithの設定方法にあったと思います

previewController.previewControllerDelegate = self;

それ以来、使用するように変更しました

[previewController setPreviewControllerDelegate:self];

これはうまくいくようです!

私の質問をチェックしてくれたすべての人に感謝します。これが誰かの助けになることを願っています!

于 2016-10-06T10:44:18.427 に答える