Я создаю приложение, которое показывает слой предварительного просмотра видео, используя AVCaptureVideoPreviewLayer.Настройка этого довольно проста, и, кажется, работает хорошо:
newCaptureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:[[self captureManager] session]];
CGRect tmpRect = CGRectInset(recordingView.bounds, 3, 3);
[newCaptureVideoPreviewLayer setFrame:CGRectInset(tmpRect, 3, 3)];
CALayer *viewLayer = [recordingView layer];
[newCaptureVideoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[viewLayer insertSublayer:newCaptureVideoPreviewLayer below:[[viewLayer sublayers] objectAtIndex:0]];
[self setCaptureVideoPreviewLayer:newCaptureVideoPreviewLayer];
[newCaptureVideoPreviewLayer release];
Позже, у меня есть ситуация, когда пользователь может обменяться видом, содержащим слой предварительного просмотра, с видом, который показывает вид, которыйсодержит записанное видео, используя MPMoviePlayerController.Я настроил его так (предыдущий блок кода взят из viewDidLoad: метод UIViewController, и это в том же контроллере, как часть его собственного метода для изменения представления:
MPMoviePlayerController * player = [[MPMoviePlayerController alloc] initWithContentURL:url];
[player.view setFrame:[detailView playerView].bounds]; // player's frame must match parent's
player.view.backgroundColor = [UIColor clearColor];
player.shouldAutoplay = NO;
player.fullscreen = NO;
player.scalingMode = MPMovieScalingModeAspectFit;
[[detailView playerView] addSubview:player.view];
Проблема в том,что, когда MPMoviePlayerController добавляется в представление, предварительный просмотр «зависает» - он показывает последний кадр того, что было перед камерой перед входом в этот блок кода. Я не получаю сообщений об ошибках и не могу найти никакихисточник проблемы.
Я отмечаю, что я не освобождаю переменную player . Любые попытки сломать проигрыватель, включая автоматическое высвобождение, или попытку выпустить его вобратный вызов уведомлений. Однако я не думаю, что эта проблема (хотя потенциально и сама по себе) является причиной уничтожения моего слоя предварительного просмотра.
Буду признателен за любую информацию, которая у вас может возникнуть по этому вопросу!
Обновление : @boredastronaut спросил ниже, как я настраиваю представления здесь. У меня есть один контроллер, выполняющий все представленияs.В моем приложении у меня есть слой предварительного просмотра, и там же, вид, который содержит плеер.Все представления загружаются в -loadView:, и я использую свойство hidden , чтобы показать / скрыть эти слои соответствующим образом.