'支持的方向与应用程序没有共同的方向,并且应该返回'是'

时间:2013-01-22 10:52:45

标签: iphone objective-c cocoa-touch ios5 ios6

* 我的观点是在景观模式我保存图像,我希望该图像回来,我的代码在下面,我发现错误“终止应用程序由于未捕获的异常'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];
              }`

7 个答案:

答案 0 :(得分:16)

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

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

像这样 -

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}


- (BOOL) shouldAutorotate {
    return YES;
}


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

答案 1 :(得分:6)

您只支持横向或纵向的有限方向。但是你在视图控制器中调用了不同的方向。

您可以使用支持的方向查看以下图像。它只支持横向右侧和左侧景观。所以,如果我调用肖像,它将像你一样显示错误。因此,如果您想支持两种方向,请在摘要中进行更改。

enter image description here

See this answer for more detail. 希望它有所帮助。

修改

所以你必须把这段代码放在你的viewcontroller中

  - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
  return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft |   UIInterfaceOrientationMaskLandscapeRight;
 }

答案 2 :(得分:5)

如果plist中支持的接口方向与-(NSUInteger)supportedInterfaceOrientations

返回的接口方向不匹配,则会引发此错误

请记住,NSUInteger返回的supportedInterfaceOrientations必须是UIInterfaceOrientationMask,请注意-MASK-,我曾经犯过简单地返回UIInterfaceOrientation i.s.o的错误。 ...掩码值(为你自动完成)

e.g。

- (NSUInteger) supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
    // and NOT UIInterfaceOrientationPortrait;
}

答案 3 :(得分:4)

注意:如果您使用UIImagePickerControllerUIPopoverController并且发生了这些error,则以下解决方案非常好。

此错误仅在iOS 6.0

中出现

创建一个新UIImagePickerController's categoryadd

@implementation UIImagePickerController(custom)

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

这对我有用。

答案 4 :(得分:1)

如果您使用的是cocos2d v2.1,可以尝试使用此功能。

    -(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);
}

支持的方向自动轮播方向应为相同

答案 5 :(得分:0)

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

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

@interface UIImagePickerController (oritation)

@end

@implementation UIImagePickerController (oritation)

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

@end

答案 6 :(得分:0)

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

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

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

祝你好运!