2012-01-25 14 views
4

私はカメラのソースタイプがUIImagePickerControllerにバグがあります。コントローラーが登場した後、シャッターが開かず、カメラのビデオ信号を見ることができませんが、撮った写真は正しいです。 enter image description hereUIImagePickerControllerのシャッター

は私が何か間違ったことをやってもいいですか?コード:

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];    
    } 
+0

をやっていますか? –

+0

いいえ、私はしません。シャッターは無限の時間にハングアップするだけですが、すべてのコントロールが通常通り応答します – Arsynth

+0

説明が1つ! - タスクバー 第二にアプリケーションを回す - 第三タスクバー からアプリケーションをオンにする - カメラの初期化 – Arsynth

答えて

1

アプリをロック/ロック解除した後も同じことが起こっていましたが、viewDidAppearでシャッターが開くように見えます。

だから、私はUIApplicationDidBecomeActiveNotificationに私の親ビューコントローラを購読し、再度実行して手動でUIImagePickerController

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(applicationBecomeActive) 
              name:UIApplicationDidBecomeActiveNotification 
              object:nil]; 

. 
. 
. 

- (void)applicationBecomeActive { 
    if (imagePicker_) 
     [imagePicker_ openShutter]; 
} 

を含むコントローラのviewWillAppearとviewDidAppear方法そして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を追加することができますいずれか

1

に役立ちます。あなたがサブビューとしてimagePickerControllerからのビューを追加することができ、この後

[thePresentingViewCotnroller addChildViewController:imagePickerController]; 

が、これは自動的に呼び出さビュー・ライフ・サイクル・メソッド( viewWillAppear, didAppear and disappear)を作成します。あなたが UIImagePickerControllerを初期化する際に、自動リリースを追加

-1

試してください:あなたは、ピッカーを表示する時点で、非常にプロセッサ集約何かを

UIImagePickerController *pickerController = [[[UIImagePickerController alloc] init] autorelease]; 
関連する問題