16

*我的视图处于景观模式,我正在保存图像,我想要返回该图像,因为我的代码在下面,我收到错误“由于未捕获的异常‘UIApplicationInvalidInterfaceOrientation’而终止应用程序,原因:‘支持的方向没有共同的方向使用应用程序,并且 shouldAutorotate 返回 YES'" *我可以为 iphone 做什么?

        `- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

         [self dismissModalViewControllerAnimated:YES];
         [picker release];

              }
             - (void)imagePickerController:(UIImagePickerController *)picker 

                didFinishPickingMediaWithInfo:(NSDictionary *)info {

            [picker dismissModalViewControllerAnimated:NO];

                imageDoodle.image = [info objectForKey:@"UIImagePickerControllerMediaMetadata"];

                 }

               -(IBAction)loadfromalbumclicked:(id)sender

                 {

                UIImagePickerController * picker = [[UIImagePickerController alloc] init];

                picker.delegate = self;

                 picker.allowsEditing=NO;

        picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

               // self.modalTransitionStyle=UIModalTransitionStyleFlipHorizontal;

              [self presentModalViewController:picker animated:YES];
               }

              -(IBAction)savePrint{
//Save image to iOS Photo Library

                 UIImageWriteToSavedPhotosAlbum(imageDoodle.image, nil, nil, nil);
//Create message to explain image is saved to Photos app library
                 UIAlertView *savedAlert = [[UIAlertView alloc] initWithTitle:@"Saved"  

                message:@"Your picture has been saved to the photo library, view it in the 

               Photos app." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
//Display message alert
             [savedAlert show];
              }`
4

7 回答 7

16

尝试将 shouldAutoRotate 设置为 NO 并查看它是否有效。

您可以在 iOS 6.0 或更高版本中使用 shouldAutoRotate 和 supportedInterfaceOrientations 方法,而不是(不推荐使用的) shouldAutoRotateToInterfaceOrientation 方法。

像这样的东西-

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}


- (BOOL) shouldAutorotate {
    return YES;
}


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}
于 2013-01-22T11:33:22.837 回答
6

您仅支持有限的方向,无论是横向还是纵向。但是您在视图控制器中调用了不同的方向。

您可以看到支持方向的下图。它只支持横向和横向。所以如果我调用纵向它会像你一样显示错误。因此,如果您想同时支持这两种方向,请在摘要中进行更改。

在此处输入图像描述

有关更多详细信息,请参阅此答案。 希望能帮助到你。

编辑

所以你必须把这段代码放在你的视图控制器中

  - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
  return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft |   UIInterfaceOrientationMaskLandscapeRight;
 }
于 2013-01-22T11:00:46.957 回答
5

如果 plist 中支持的接口方向与返回的接口方向不匹配,则会引发此错误-(NSUInteger)supportedInterfaceOrientations

请记住,NSUInteger返回的supportedInterfaceOrientations必须是 UIInterfaceOrientationMask,请注意 -MASK-,我曾经犯过简单地返回 UIInterfaceOrientation iso 的错误 ...Mask 值(这对你来说是自动完成的)

例如

- (NSUInteger) supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
    // and NOT UIInterfaceOrientationPortrait;
}
于 2013-11-12T10:14:03.537 回答
4

注意:如果您使用UIImagePickerControllerorUIPopoverController并且发生这些error情况,那么以下这些解决方案非常好。

这些错误也iOS 6.0只出现

创建一个新的UIImagePickerController's categoryadd

@implementation UIImagePickerController(custom)

  -(BOOL)shouldAutorotate
  {
    return NO;
  }
@end

这对我有用。

于 2014-02-25T10:22:57.970 回答
1

如果你使用的是 cocos2d v2.1,你可以试试这个 for Portrait。

    -(NSUInteger)supportedInterfaceOrientations {

    // iPhone only
    if( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone )
        return UIInterfaceOrientationMaskPortrait;

    // iPad only
    return UIInterfaceOrientationMaskPortrait;
}

// Supported orientations. Customize it for your own needs
// Only valid on iOS 4 / 5. NOT VALID for iOS 6.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // iPhone only
    if( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone )
        return UIInterfaceOrientationIsPortrait(interfaceOrientation);
    // iPad only
    // iPhone only
    return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}

支持的 方向和自动旋转方向应该相同

于 2013-08-26T09:31:01.717 回答
0

我有同样的错误,它可能是以下一个或多个返回冲突方向:

  • 检查您的 -Info.plist,以获取关键的“支持的界面方向”
  • 通过在项目导航器中单击您的应用程序来检查您的摘要窗格。
  • 正如其他人所提到的,检查supportedInterfaceOrientations 方法返回的内容。

我通过在 -Info.plist 中明确定义单独的“支持的界面方向(iPad)”和“支持的界面方向(iPhone)”键来解决我的问题,因为我想要不同设备的不同方向。

祝你好运!

于 2013-12-16T15:04:10.660 回答
0

对于 iOS 6.0,如果你的应用只支持横向模式,当你弹出 UIImagePickerController 时,它会崩溃。

我的解决方案是将以下类别添加到 UIImagePickerController:

@interface UIImagePickerController (oritation)

@end

@implementation UIImagePickerController (oritation)

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

@end
于 2013-10-23T07:05:37.083 回答