2016-08-27 33 views
0

我正在为我的应用程序制作自定义相机功能,但是当我从应用程序中退出时,相机被冻结。我怎样才能解决这个问题?当我回到应用程序(Obj-C)时,相机被冻结

我想在用户再次打开应用程序时恢复照相机,而不必关闭应用程序并重新打开应用程序。

代码:

AVCaptureSession *session; 
AVCaptureStillImageOutput *stillImageOutput; 

- (void)viewWillAppear:(BOOL)animated 
{ 
    session = [[AVCaptureSession alloc] init]; 
    [session setSessionPreset:AVCaptureSessionPresetPhoto]; 

    AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    NSError *error; 
    AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:inputDevice error:&error]; 

    if ([session canAddInput:deviceInput]) { 
     [session addInput:deviceInput]; 
    } 

    AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; 
    [previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; 
    CALayer *rootLayer = [[self view] layer]; 
    [rootLayer setMasksToBounds:YES]; 
    CGRect frame = frameForCapture.frame; 

    [previewLayer setFrame:frame]; 
    [rootLayer insertSublayer:previewLayer atIndex:0]; 

    stillImageOutput = [[AVCaptureStillImageOutput alloc] init]; 
    NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys:AVVideoCodecJPEG, AVVideoCodecKey, nil]; 
    [stillImageOutput setOutputSettings:outputSettings]; 

    [session addOutput:stillImageOutput]; 
    [session startRunning]; 

    crossButton.hidden = YES; 
} 

- (IBAction)takePhoto:(id)sender 
{ 
    AVCaptureConnection *videoConnection = nil; 

    for (AVCaptureConnection *connection in stillImageOutput.connections) { 

     for (AVCaptureInputPort *port in [connection inputPorts]) { 

      if ([[port mediaType] isEqual:AVMediaTypeVideo]) { 
       videoConnection = connection; 
       crossButton.hidden = NO; 
       cameraButton.hidden = YES; 
       break; 

      } 

     } 

    } 

    [stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) { 

     if (imageDataSampleBuffer != NULL) { 

      NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer]; 
      UIImage *image = [UIImage imageWithData:imageData]; 
      imageView.image = image; 

     } 
    }]; 
} 

回答

1

也许你正在使用viewWillAppearviewDidAppear方法来配置你的相机在你的应用程序。

使用viewDidLoad方法来配置相机,只要视图控制器需要加载其视图层次结构,该方法将被调用一次。

原因:方法viewDidAppearviewWillAppear调用每次只要应用导航回到同一viewController时间。

相关问题