[iphone] AVCaptureVideoPreviewLayer



2 Answers

Una posible causa de confusión es que AVCaptureVideoPreviewLayer es una capa de CoreAnimation y en todas las respuestas anteriores se está posicionando estáticamente (por ejemplo, sin restricciones) relativa a una vista. Si usa restricciones para diseñar la vista, estas no cambian automáticamente el tamaño de la capa de vista previa.

Esto significa que no puede configurar la capa de vista previa en viewDidLoad ya que el diseño aún no se ha realizado y la capa de vista previa tendrá el mismo tamaño que en el Generador de interfaces.

En su lugar, anule viewDidLayoutSubviews en su ViewController y coloque allí la capa de vista previa.

- (void)viewDidLayoutSubviews
{
    CGRect bounds=view.layer.bounds;
    avLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;  
    avLayer.bounds=bounds;
    avLayer.position=CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
}
Question
AVCaptureVideoPreviewLayer *avLayer = 
                [AVCaptureVideoPreviewLayer layerWithSession:session];
avLayer.frame = self.view.frame;
[self.view.layer addSublayer:avLayer];

Uso AVCaptureVideoPreviewLayer para mostrar video en la vista. Pero la vista del video no llenó la pantalla completa del iPhone4 (dos barras grises en el lado derecho e izquierdo)

Quiero que el video se llene a pantalla completa. ¿Cómo puedo lidiar con eso? ¡Muchas gracias!




La respuesta aceptada por 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)



Por el bien de Google, esta es la respuesta aceptada pero usando Swift que es ligeramente diferente:

var bounds:CGRect = self.view.layer.bounds
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer?.bounds = bounds
previewLayer?.position = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds))



Related