ReplayKitのネイティブスクリーンレコーディング機能をユニティアプリケーションと一緒に使用しようとしているので、ネイティブスクリーンレコーディングと共有UIの利点があります。Unityプラグインを使用してiOS ReplayKitをUnity 5.3.4で使用しているときにPreviewViewControllerを閉じることができない
Objective-C(++)で書かれたネイティブコードを呼び出すUnityプラグインを作成しましたが、RPPreviewViewController
を破棄するまですべてがうまくいくようです。
Unity UIの録音ボタンがReplayKit startRecordingWithMicrophoneEnabled:handler
機能を起動し、停止ボタンがRPPreviewViewController
インスタンスをハンドラに返すstopRecording関数を正しく呼び出します。
RPPreviewViewController
では、「保存」ボタンが正しくカメラロールに保存され、共有ボタンが正常に機能します。しかし、「取り消し」(コンテキストに応じて「完了」)をタップすることは何もしません。ここで
は、コードがRPPreviewViewController
を扱う私のstopRecordingWithHandler:
機能である:あなたが見ることができるように、私はRPPreviewViewControllerDelegate
のためのプロトコルを実装し、その上にビューを解任しようとしている
- (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;
}
クローズイベントですが、デリゲート関数が呼び出されることはありません。
私は何が間違っているのか分かりません。私は間違ってコーディングしてしまったのでしょうか、Unityと一緒に使用すると複雑ですか?
私は何かのポインタが大いに感謝されるように立ち往生しています!
UPDATE: rootView
はので、ここで上記のコードで使用されているが、私はinit
機能でその参照を取得した方法です:
static UIViewController *rootView;
- (ReplayKitController*) init {
self = [super init];
if(self && rootView == nil) {
rootView = [[UIApplication sharedApplication] windows][0].rootViewController;
}
return self;
}