Вам необходимо провести установку после ваших подвиды изложил. В viewDidLayoutSubviews
-(void)viewDidLayoutSubviews
{
[self setupAVCapture];
}
- (void)setupAVCapture {
NSError *error = nil;
AVCaptureSession *session = [AVCaptureSession new];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
[session setSessionPreset:AVCaptureSessionPreset640x480];
else
[session setSessionPreset:AVCaptureSessionPresetPhoto];
// Select a video device, make an input
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if ([session canAddInput:deviceInput])
[session addInput:deviceInput];
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
previewLayer.frame = self.camView.bounds;
[self.camView.layer addSublayer:previewLayer];
[session startRunning];
}
Что, вероятно, происходит с вами в том, что границы не были точно еще установлены в вашем viewDidLoad
как подвиды еще предстоит прокладывать в соответствии с их ограничениями. Когда вы установите рамку для previewLayer
в viewDidLayoutSubviews
, она примет правильную ориентацию. Будьте осторожны, вам также нужно будет настроить предварительный просмотр при повороте, а что нет и изменить код, который я использовал. Извините, что это не быстро, но это не имеет значения. Просто переместите экземпляр и установки в viewDidLayoutSubviews
Так что для вашего кода, вы должны сделать что-то вроде этого:
override func viewDidLayoutSubviews() {
...
previewLayer = AVCaptureVideoPreviewLayer.layerWithSession(session) as! AVCaptureVideoPreviewLayer
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer.frame = self.camView.layer.bounds
self.camView.layer.addSublayer(previewLayer)
session.startRunning()
Это работало для вас? – Erik
№ Когда я перемещаю код в viewdidlayoutsubviews, он вообще не работает. На вид у меня есть uiview и tableciew. И это швы, что автоопределение как-то увеличивает высоту uiview, и поэтому Camera не такой же размер, как uiview. Я не знаю, как с этим справиться. – 1110
Пожалуйста, предоставьте мне больше кода, чтобы помочь диагностировать это. – Erik