Одной из возможных причин путаницы является то, что AVCaptureVideoPreviewLayer
является слоем CoreAnimation и во всех приведенных выше ответах располагается статически (например, без ограничений) относительно вида.Если вы используете ограничения для макета представления, они не изменяют размер слоя предварительного просмотра автоматически.
Это означает, что вы не можете настроить слой предварительного просмотра в viewDidLoad
, так как макет еще не выполнен и предварительный просмотрслой будет иметь такой же размер, как в Интерфейсном Разработчике.
Вместо этого переопределите viewDidLayoutSubviews
на ViewController
и поместите туда слой предварительного просмотра.
- (void)viewDidLayoutSubviews
{
CGRect bounds=view.layer.bounds;
avLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
avLayer.bounds=bounds;
avLayer.position=CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
}