1

AVCaptureSession が前面カメラを隅の小さなビューに表示して、映画をフルスクリーンで再生しようとしています (FaceTime を考えてください)。ビデオを再生するためのコードをコメント アウトすると、FrontCamera は、それを含む UIView を配置した隅に完全に表示されます。コードをそのまま実行すると、ビデオのみが表示され、AVCapture の subLayer を含む UIView が隠されます。もう 1 つの問題は、ムービーのコントロールとタイムライン バーの表示です。MPMoviePlayerController でそれを無効にする方法があるかどうか知りたいです。私が使用しているコードは次のとおりです。

AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetMedium;

CALayer *viewLayer = self.vImagePreview.layer;
NSLog(@"viewLayer = %@", viewLayer);

AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
captureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
captureVideoPreviewLayer.frame = self.vImagePreview.bounds;
[self.vImagePreview.layer addSublayer:captureVideoPreviewLayer];

AVCaptureDevice *device = [self frontFacingCameraIfAvailable];

NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (!input) {
    // Handle the error appropriately.
    NSLog(@"ERROR: trying to open camera: %@", error);
}
[session addInput:input];

[session startRunning];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectoryPath = [paths objectAtIndex:0];
NSString *proud = [[documentsDirectoryPath stringByAppendingPathComponent:@"proud"] stringByAppendingPathComponent:selectedCountry];

NSURL  *movieURL = [[NSURL fileURLWithPath:proud] retain];
self.player =

[[MPMoviePlayerController alloc] initWithContentURL: movieURL];

[player prepareToPlay];

player.allowsAirPlay = NO;
player.scalingMode = MPMovieScalingModeFill;    
self.player.view.frame = self.view.frame;

[self.view addSubview: player.view];
[self.player setFullscreen:YES animated:YES];

// ...

[[NSNotificationCenter defaultCenter] 
 addObserver:self
 selector:@selector(movieFinishedCallback:)
 name:MPMoviePlayerPlaybackDidFinishNotification
 object:player];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(exitedFullscreen:) name:MPMoviePlayerDidExitFullscreenNotification object:player];


[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(moviePlayerWillExitFullscreen:)
                                             name:MPMoviePlayerWillExitFullscreenNotification
                                           object:player];


[player play];

vImagePreview は、ヘッダーで宣言された IBOutlet UIView プロパティです。

4

1 に答える 1

1

デフォルトでは、ビューは最後に追加された状態で表示されます。したがって、コードがムービープレーヤービューを追加すると、次のようになります。

[self.view addSubview:player.view];

それは他のすべての上にあり、親の境界のフルサイズのフレームを持っています。一番上に残したいサブビューがある場合は、ムービープレーヤーを追加した後でそれを一番上に戻すことができます...

[self.view bringSubviewToFront:otherSubview];

..または、最初にその下にムービープレーヤーを配置します...

[self.view insertSubview:player.view belowSubview:otherSubview];

ビュー階層を制御するために使用できる方法は他にもたくさんあります。お役に立てば幸いです。

于 2012-04-24T04:19:55.703 に答える