AVCaptureVideoPreviewLayer *avLayer =
[AVCaptureVideoPreviewLayer layerWithSession:session];
avLayer.frame = self.view.frame;
[self.view.layer addSublayer:avLayer];
AVCaptureVideoPreviewLayerを使用して、ビューにビデオを表示します。しかし、ビデオのビューは、iPhone4の画面全体を埋めることはできませんでした(右側と左側にある2つの灰色のバー)
ビデオがフルスクリーンいっぱいになるようにします。どうすれば対処できますか?どうもありがとうございました!
たぶんこれで解決しますか?
CGRect bounds=view.layer.bounds;
avLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
avLayer.bounds=bounds;
avLayer.position=CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
混乱の原因の1つは、AVCaptureVideoPreviewLayer
がCoreAnimationレイヤーであり、上記のすべての回答でビューに対して静的に(たとえば、制約なしで)配置されていることです。ビューのレイアウトに制約を使用する場合、これらはプレビューレイヤーのサイズを自動的に変更しません。
これは、レイアウトがまだ実行されておらず、Interface Builderでのプレビューレイヤーのサイズが変更されるため、viewDidLoad
でプレビューレイヤーを設定できないことを意味します。
代わりに、viewDidLayoutSubviews
でViewController
をオーバーライドし、プレビューレイヤーをそこに配置します。
- (void)viewDidLayoutSubviews
{
CGRect bounds=view.layer.bounds;
avLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
avLayer.bounds=bounds;
avLayer.position=CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
}
@fitzwaldの答えはあなたに望ましい結果を与えますが、もっと簡単な方法があります。何が起こっているのかというと、セッションプリセットはデフォルトでビデオ-高(画面の縦横比と一致しません)になっています。 (Camera.appのような)全画面プレビューは、Photoプリセットを使用して実現できます。設定するだけ
session.sessionPreset = AVCaptureSessionPresetPhoto;
セッションを開始する前に。詳細については Apple Documentation をご覧ください。
Googleのために、これは受け入れられた答えですが、Swiftを使用しますが、これは少し異なります:
var bounds:CGRect = self.view.layer.bounds
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer?.bounds = bounds
previewLayer?.position = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds))
受け入れられた答え
スウィフト3:
let bounds = view.layer.bounds
self.cameraLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
self.cameraLayer.bounds = bounds
self.cameraLayer.position = CGPoint(x:bounds.midX, y:bounds.midY)
self.cameraView?.layer.addSublayer(self.cameraLayer)
Swift 4:
let bounds = view.layer.bounds
self.cameraLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
self.cameraLayer.bounds = bounds
self.cameraLayer.position = CGPoint(x:bounds.midX, y:bounds.midY)
self.cameraView?.layer.addSublayer(self.cameraLayer)
私はこれを達成するために次のコードを使用します
previewLayer.frame = CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height);
previewLayer.orientation = [[UIDevice currentDevice] orientation];
previewLayer.contentsGravity = kCAGravityResizeAspectFill;