0

UIImagePickerControllerを閉じようとすると、アプリがクラッシュします。エラーは次のとおりです。「キャッチされなかった例外によるアプリの終了'UIApplicationInvalidInterfaceOrientation'、理由:'preferredInterfaceOrientationForPresentationは、サポートされているインターフェイスの向きを返す必要があります!'」

ビューコントローラで優先インターフェイスの向きを設定しています。

-(NSUInteger)supportedInterfaceOrientations
{
 return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
 {
return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}

- (BOOL) shouldAutorotate {
return YES;
}

これが私がカメラを起動するために呼び出しているメソッドです。これはカメラを追加するために正常に機能しますが、私が言ったように、カメラを削除しようとするとクラッシュします。

-(IBAction)addCamera:(id)sender
{

self.cameraController = [[UIImagePickerController alloc] init];
self.cameraController.sourceType = UIImagePickerControllerSourceTypeCamera;

self.cameraController.cameraViewTransform = CGAffineTransformScale(self.cameraController.cameraViewTransform,
                                                                   1.13f,
                                                                   1.13f);

self.cameraController.showsCameraControls = NO;
self.cameraController.navigationBarHidden = YES;

self.wantsFullScreenLayout = YES;

ar_overlayView = [[UIView alloc] initWithFrame:CGRectZero];

self.view = ar_overlayView;
[self.cameraController setCameraOverlayView:ar_overlayView];
[self presentViewController:cameraController animated:NO completion:nil];
[ar_overlayView setFrame:self.cameraController.view.bounds];
}

-(IBAction)back:(id)sender
{
[ar_overlayView removeFromSuperview];
[cameraController dismissViewControllerAnimated:NO completion:nil];
}
4

5 に答える 5

1

さて、解決策を見つけました、それは本当に簡単でした、私はちょうど私のbackメソッドを次のように変更しました:

    [self dismissModalViewControllerAnimated:YES];

これでカメラが消え、戻るボタンを押すと元のビューを見ることができます。info.plistとサポートされている方向の方法を調べたので、元の問題の原因をまだ理解していませんが、これで私が望んでいたことは達成されます。

誰かが何か考えを持っているとしても、私はまだエラーの原因について知りたいです。

于 2012-12-21T04:16:56.970 に答える
1

このメソッドを削除してみてください。

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

修正されますが、stateBarの高さが低くなる場合があります。

于 2015-10-09T06:51:28.583 に答える
0

UIViewControllerのメインビューをそのスーパービューから削除することはできません。

これの代わりに:

self.view = ar_overlayView;

これを試して:

[self.view addSubview:ar_overlayView];

そうすれば、スーパービューから正しく削除できるようになります。

于 2012-12-17T22:56:48.933 に答える
0

以下のようなdidFinishPickingMedieWithInfoメソッドを使用し、[self dismissModalViewControllerAnimated:YES]を使用する必要があります。

-(void) imagePickerController:(UIImagePickerController *) picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{

if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {

    NSLog(@"Camera");


}

else {


    NSLog(@"Album");

 }

 [self dismissModalViewControllerAnimated:YES];
 }
于 2012-12-17T23:37:09.113 に答える
0

ar_overlayViewカメラオーバーレイの場合は、現在のビューに自分で追加する必要はないと思います。

これがあなたのコードが今していることです:

  1. ar_overlayView現在のビューに追加
  2. ar_overlayViewカメラのオーバーレイビューとして追加
  3. カメラビューを表示する(モーダル)

この時点で、は2回ar_overlayView表示されています。カメラビューを閉じるメッセージを送信すると、同時に2つのビュー階層にあるため、混乱する可能性があります。removeFromSuperview

self.view = ar_overlayView;または行をスキップ[self.view addSubview:ar_overlayView];すると、問題が解決するはずです。

また、呼び出されたdismissViewControllerAnimated:completion:のと同じオブジェクト(この場合)に送信する必要があります。presentViewController:animated:completionself

-(IBAction)addCamera:(id)sender
{
  // -- snip -- //
  ar_overlayView = [[UIView alloc] initWithFrame:self.cameraController.view.bounds];
  [self.cameraController setCameraOverlayView:ar_overlayView];
  [self presentViewController:self.cameraController animated:NO completion:nil];
}

-(IBAction)back:(id)sender
{
  [self dismissViewControllerAnimated:NO completion:nil];
}
于 2012-12-18T05:11:33.953 に答える