显示相机预览

时间:2014-04-28 10:10:07

标签: ios cocoa-touch

我希望在2个视图中预览相机,因此我创建了一个课程CameraSingleton
CameraSingleton.h:

@property (retain) AVCaptureVideoPreviewLayer *previewLayer;
@property (retain) AVCaptureSession *session;

- (void)addVideoPreviewLayer;
- (void)addVideoInput;

CameraSingleton.m:

@implementation CameraSingleton
@synthesize session;
@synthesize previewLayer;

- (id)init {
    if ((self = [super init])) {
        [self setSession:[[AVCaptureSession alloc] init]];
    }
    return self;
}

- (void)addVideoPreviewLayer {
    [self setPreviewLayer:[[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session]];
    [[self previewLayer] setVideoGravity:AVLayerVideoGravityResizeAspectFill];

}

- (void)addVideoInput {
    AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    if (videoDevice) {
        NSError *error;
        AVCaptureDeviceInput *videoIn = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error];
        if (!error) {
            if ([[self session] canAddInput:videoIn])
                [[self session] addInput:videoIn];
            else
                NSLog(@"Couldn't add video input");
        }
        else
            NSLog(@"Couldn't create video input");
    }
    else
        NSLog(@"Couldn't create video capture device");
}

在两个ViewControllers中都实现了这个方法:

- (void)showPreview {
[cameraSingleton addVideoInput];
    [cameraSingleton addVideoPreviewLayer];

    CGRect layerRect = [[self.mainView layer] bounds];
    [cameraSingleton.previewLayer setBounds:layerRect];
    [cameraSingleton.previewLayer setPosition:CGPointMake(CGRectGetMidX(layerRect),
                                          CGRectGetMidY(layerRect))];

    [[[self view] layer] addSublayer:cameraSingleton.previewLayer];
}

但我看不到预览。我检查了IBOutlet的mainView并阅读了Apple的文档,但我无法弄清楚问题。有什么建议吗?

0 个答案:

没有答案