0

いくつかのビューが押されたポップオーバー(UIPopoverController)を備えたiPadアプリがあり、そのうちの1つにはカメラを起動するボタンがあります...画像を参照してください...

ここに画像の説明を入力してください

カメラはこの方法で扇動されます...

- (IBAction)selectPlanImageFromCamera:(id)sender
{
    [self.blockTextField resignFirstResponder];
    [self.levelTextField resignFirstResponder];
    [self.zoneNamePrefixTextField resignFirstResponder];
    [self.nameTextField resignFirstResponder];
    [self.notesTextView resignFirstResponder];

    imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.allowsEditing = NO;
    imagePicker.delegate = self;
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    imagePicker.modalPresentationStyle = UIModalPresentationFullScreen;
    imagePicker.showsCameraControls = YES;

    [self presentViewController:imagePicker animated:YES completion:^{}];
}

次に、フルスクリーンのモーダルカメラビューが表示されます。これは、画面の境界よりわずかに低い位置に配置されているという事実から、期待どおりに機能します。これは、下部のコントロールが画面の南20ピクセルにあり、画面の上部に20ピクセルの黒い帯があることを意味します...画像を参照してください...

ここに画像の説明を入力してください

このアプリは現在iOS6を対象としていますが、以前はiOS5でも同じ効果が得られていました。誰かが回避策や修正を考えることができますか?

マイケル、よろしくお願いします。

4

3 に答える 3

1

これは、ステータスバーの高さに何らかの形で関係していると思われ20pxます。私たちの推測は正しかった、そして以下のコードUIIMagePickerControllerは表示されている間ステータスバーを隠す私たちのために働いた。

 UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
 imagePicker.delegate = self;
 imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
 imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *) kUTTypeImage,nil];
 imagePicker.allowsEditing = NO;

 if (IS_IPAD)
 {                
    imagePicker.modalPresentationStyle = UIModalPresentationFullScreen;
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];

    [self presentViewController:imagePicker animated:YES completion:nil];
 }

次の各デリゲートに以下のコードを追加する必要がある場合があります:- imagePickerControllerDidCanceldidFinishPickingMediaWithInfoおよびfinishedSavingWithError

if (IS_IPAD)
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
于 2013-08-02T21:56:31.730 に答える
0

shawnwallのコメントから元の質問へのポインタに続いて、ルートUIViewControllerでpresentViewControllerメソッド呼び出しを実行し、写真を撮る側のいずれかの側でUIPopoverControllerを閉じて再確立することにより、これを修正することができました。

だから、私はカメラビューを扇動するための私の方法を持っています...(最後の2行は新しいことに注意してください-1行目はポップオーバーを閉じ、2行目はメインルートUIViewControllerのUIImagePickerControllerを示します)

- (IBAction)selectPlanImageFromCamera:(id)sender
{
    [self.blockTextField resignFirstResponder];
    [self.levelTextField resignFirstResponder];
    [self.zoneNamePrefixTextField resignFirstResponder];
    [self.nameTextField resignFirstResponder];
    [self.notesTextView resignFirstResponder];

    cameraImagePicker = [[NonRotatingUIImagePickerController alloc] init];
    cameraImagePicker.allowsEditing = NO;
    cameraImagePicker.delegate = self;
    cameraImagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    cameraImagePicker.modalPresentationStyle = UIModalPresentationFullScreen;
    cameraImagePicker.showsCameraControls = YES;

    [mainCanvasViewController.sitePopoverController dismissPopoverAnimated:YES];
    [mainCanvasViewController presentViewController:cameraImagePicker animated:YES completion:^{}];
}

次に、UIImagePickerControllerを閉じている場所にポップオーバーを再表示します。この場合はdidFinishPickingMediaWithInfoデリゲートメソッド(上記と同じUIViewController内)で...

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    if ([info objectForKey:UIImagePickerControllerMediaType] == (NSString *)kUTTypeImage)
    {
        ... // image handling
    }

    [picker dismissViewControllerAnimated:YES completion:^{}];

    UIBarButtonItem *tappedButton = mainCanvasViewController.navigationItem.leftBarButtonItem;
    [mainCanvasViewController.sitePopoverController presentPopoverFromBarButtonItem:tappedButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

これは問題なく機能します。カメラが画面の下部からアニメーション化されているときにポップオーバーが再表示されるため、カメラビューを閉じてポップオーバーを再表示すると、少しきれいになる可能性があります。ポップオーバーがカメラの後に表示された方が見栄えがよくなります。移行しましたが、私にとってこれは現時点では大きな問題ではありません。

これが、UIPopoverControllerからフルスクリーンカメラUIImagePickerControllerを開きたい人に役立つことを願っています。

よろしく、マイケル。

于 2012-09-27T12:40:22.743 に答える
0

試す

cameraImagePicker.modalPresentationStyle = UIModalPresentationFullScreen;

これにより、UIImagePickerControllerインスタンスにプレゼンテーションスタイルが通知され、このバグが修正されます。

于 2013-09-13T17:51:49.283 に答える