Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 相机预览在另一个视图中的宽度问题_Iphone_Objective C_Ios_Ios6 - Fatal编程技术网

Iphone 相机预览在另一个视图中的宽度问题

Iphone 相机预览在另一个视图中的宽度问题,iphone,objective-c,ios,ios6,Iphone,Objective C,Ios,Ios6,我在iPhone屏幕的一半添加了摄像头预览 -(void) viewDidAppear:(BOOL)animated { AVCaptureSession *session = [[AVCaptureSession alloc] init]; session.sessionPreset = AVCaptureSessionPresetMedium; CALayer *viewLayer = self.vImagePreview.view.layer; NSLog

我在iPhone屏幕的一半添加了摄像头预览

-(void) viewDidAppear:(BOOL)animated
{
    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    session.sessionPreset = AVCaptureSessionPresetMedium;

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

    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];

    captureVideoPreviewLayer.frame = self.vImagePreview.view.bounds;
    [self.vImagePreview.view.layer addSublayer:captureVideoPreviewLayer];

    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    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];
}
我在viewDidLoad方法中添加了摄影机视图控制器,并设置其帧:

vImagePreview.view.frame = CGRectMake(0, 44, 320, 179);
但是摄像机的视角不是320。您知道如何通过这种方式设置相机视图的宽度吗?
高度可以,但宽度约为100宽。
这就像在这个链接宽度是320,但相机视图是从某种原因更小(宽度)。
![在此处输入图像描述][1]

更改相机预览屏幕宽度并进行检查

 captureVideoPreviewLayer.frame = self.vImagePreview.view.bounds;
这就是罪魁祸首

您需要使用
AVLayerVideoGravityResizeAspectFill
属性添加
videoGravity
(指示视频在播放器层边界中的显示方式) 然后指定
界限
和最后但并非最不重要的界限, 您需要给出确定矩形中心的
x和y坐标。

CGRect bounds=self.vImagePreview.view.layer.bounds;
avLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
avLayer.bounds=bounds;
avLayer.position=CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));

从代码captureVideoPreviewLayer.frame=self.vImagePreview.view.bounds中可以看到,预览屏幕为320/179;我也将这个值320/179添加到previewLayer中。这在我第一次设置它时对我有效。但在应用程序进入后台之后,我再次这样做,它被抵消了。