web-dev-qa-db-ja.com

iOS SDK-UIImagePickerControllerを使用しているときにステータスバーを元に戻す方法

UIImagePickerControllerサブビューをビューに追加するとすぐに、ステータスバーが消えて元に戻すことができなくなります。ステータスバーを表示したままにする方法はありますか?

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;


[self.view addSubview:imagePicker.view];

[imagePicker viewWillAppear:YES];
[imagePicker viewDidAppear:YES];

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
22
dan

カメラアプリでも同じことをしなければなりませんでした。どうやら、ステータスバーを非表示にしないように設定するだけでなく、カメラビューで非表示にした後でスタイルをリセットする必要もあります。これを試して:

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
29

その間、受け入れられた回答のソリューションは廃止されました。

使用する

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

の代わりに

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];

アニメーションパラメータの有効な値は、UIStatusBarAnimationNoneUIStatusBarAnimationFadeUIStatusBarAnimationSlideです。詳細は documentation にあります。

15
alex

これを読んでうまくいかない回答を見つけた後、私は次のようにしてなんとかそれを機能させることができました。

•UIImagePickerControllerのデリゲートを設定する
•そのデリゲートで、デリゲートのステータスバーを非表示にしますnavigationController:didShowViewController:animated: 関数。

例えば:

-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}
6
Tim

UIImagePickerをルートビュー(つまり、ナビゲーションコントローラーまたはTabbarController)に追加します。

[self.tabBarController presentModalViewController:imagePickerController animated:YES];

その後、あなたは使うことができます

- (void)imagePickerController:(UIImagePickerController *)picker 
            didFinishPickingImage:(UIImage *)image
                      editingInfo:(NSDictionary *)editingInfo
{
      // do your stuff
     [picker dismissModalViewControllerAnimated:YES];
}

imagePickerを閉じます。

1

まあ、私はあなたがこれを行うべきではないことを知っていますが、UIImagePickerControllerをサブクラス化するなら、あなたはそれをあなたのカスタムクラスに置くことができます:

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
}
0
rptmat57

IOS 5.1.1で機能するソリューションはありませんでしたTimのソリューションはiOS 4.2.1で機能しましたiOS 5.1.1で問題を修正できた唯一の方法はそのようなものでした

-(void)viewDidAppear:(BOOL)animated
{
    double delayInSeconds = 0.01;
    dispatch_time_t popTime = 
            dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [[UIApplicationsharedApplication] setStatusBarHidden:NO];
});

これは非常にハックで間違っています。

ソリューションを探すのに半日を費やし、AVFoundationアプローチを使用することにしました。AVCaptureSessionとAVCaptureStillImageOutputを使用して必要なのと同じ基本的な写真キャプチャを実装するのに1時間かかりました。また、AVCaptureSessionはUIImagePickerControllerよりも速く起動し、AVCaptureVideoPreviewLayerは、UIImagePickerカメラプレビューと比較して、最新のデバイスでのフレームレートがはるかに優れています。

0
borisgolovnev