UIImagePickerController的快门

我有与UIImagePickerController哪个来源types是相机的错误。 有时控制器出现后,快门不能打开,我看不到一个摄像机的video信号,但拍摄的照片是正确的。 在这里输入图像说明

可能是我做错了什么? 码:

if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]){ UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init]; cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera; cameraUI.allowsEditing = NO; cameraUI.showsCameraControls = NO; cameraUI.delegate = self; NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil]; UIView *controlsView = [nibObjects objectAtIndex:0]; CGRect overlayViewFrame = cameraUI.cameraOverlayView.frame; CGRect controlsFrame = CGRectMake(0.0, CGRectGetHeight(overlayViewFrame) - 54.0, CGRectGetWidth(overlayViewFrame), 54.0); controlsView.frame = controlsFrame; [cameraUI.cameraOverlayView addSubview:controlsView]; [self presentModalViewController: cameraUI animated: YES]; } 

locking/解锁应用程序后,我也遇到了同样的情况,它看起来像在viewDidAppear打开快门。

所以,我订阅了我的父视图控制器到UIApplicationDidBecomeActiveNotification并手动重新执行包含UIImagePickerController的控制器的viewWillAppear和viewDidAppear方法

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil]; . . . - (void)applicationBecomeActive { if (imagePicker_) [imagePicker_ openShutter]; } 

然后在包含UIImagePickerController的控制器上

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [imagePickerController_ viewWillAppear:animated]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [imagePickerController_ viewDidAppear:animated]; imagePickerController_.cameraFlashMode = cameraFlashMode_; imagePickerController_.cameraDevice = cameraDevice_; } - (void)openShutter { [imagePickerController_ viewWillAppear:YES]; [imagePickerController_ viewDidAppear:YES]; } 

PS:如果你尝试这个,不要忘记删除观察者

 [[NSNotificationCenter defaultCenter] removeObserver:self]; 

希望这可以帮助

如果您以模态方式呈现UIImagePickerController (推荐的方式),则可以手动调用viewDidAppear和willAppear,或者将UIImagePickerController作为子视图控制器从您呈现的位置添加。

 [thePresentingViewCotnroller addChildViewController:imagePickerController]; 

在此之后,您可以添加从imagePickerController视图作为子视图,这将使视图生命周期方法( viewWillAppear, didAppear and disappear )自动调用。

尝试在初始化UIImagePickerController时添加自动释放:

 UIImagePickerController *pickerController = [[[UIImagePickerController alloc] init] autorelease];