而在iPhone开启相机在IOS 7横向模式定位问题(Orientation issue in La

2019-10-20 04:01发布

我有一个应用程序,它仅在横向模式。 在我的应用我从我的观点一个打开相机。 这是很好的工作为我的iPad,但在iPhone上它崩溃。 它在iOS 6中运作良好,但应用程序崩溃的iOS 7只为iPhone。

下面是我的代码。

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{

    ipc=[[UIImagePickerController alloc] init ];
    ipc.delegate=self;
    ipc.sourceType=UIImagePickerControllerSourceTypeCamera;
    [self presentViewController:ipc animated:YES completion:nil];
} 
else {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Desc" message:@"Camera capture is not supported in this device" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
    [alert release];
}

如何解决这个问题?

当我选择从相机捕捉到它崩溃。 它不会从上面的代码崩溃,但在那之后它下面的错误崩溃。

我得到这个错误:

终止应用程序由于未捕获的异常“UIApplicationInvalidInterfaceOrientation”,理由是:“支持的方向与应用程序中没有共同的方向,并shouldAutorotate将返回YES

而我的应用程序崩溃。

这个观点我的方向代码。

-(BOOL)shouldAutorotate
{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight ;
}

Answer 1:

我以前也收到同样的问题。 我遵循的步骤。 请试试这个,让我知道你面临同样的问题。 复选标记

第1步:检查appdelegate.m

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
     return UIInterfaceOrientationMaskAll;
}

步骤2:在你的视图控制器

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
if (interfaceOrientation==UIInterfaceOrientationLandscapeLeft || interfaceOrientation==UIInterfaceOrientationLandscapeRight)
    return YES;
    return NO;
}

第3步:您的视图控制器

-(IBAction)TakePhoto:(id)sender{

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
       UIImagePickerController*    imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.delegate = self;
        imagePicker.allowsEditing = YES;
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *) kUTTypeImage, nil];
        [self.view.window.rootViewController presentViewController:imagePicker animated:YES completion:nil];//add to view as per requirement
    }
    else
    {
        UIAlertView *noCam = [[UIAlertView alloc] initWithTitle:@"Notification" message:@"There is No Camera Fecility" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [noCam show];
    }
}


Answer 2:

是否崩溃发生在启动UIImagePickerController或采取的图像与相机后? 我尝试了你的代码上运行iOS7一个iPod,它工作正常。 该问题可能是别的地方。 我见过崩溃与发生UIImagePickerController由于内存使用情况,以便这可能是东西给你检查。 另外虽然我们在这, presentModalViewController:animated:是因为iOS6.0弃用。 您需要使用presentViewController:animated:completion:代替。 还看到您发布声明UIAlertView ,它看起来像你不使用ARC所以内存的使用是绝对的东西我会去了解一下。 希望这可以帮助。

编辑:从的UIImagePickerController文档
Important: The UIImagePickerController class supports portrait mode only. This class is intended to be used as-is and does not support subclassing. The view hierarchy for this class is private and must not be modified, with one exception. You can assign a custom view to the cameraOverlayView property and use that view to present additional information or manage the interactions between the camera interface and your code.



Answer 3:

试试这个代码,它工作在我的旧应用程序。

-(BOOL)shouldAutorotate {
    return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

可能要检查这一点: 仅在景观应用的GameCenter认证抛出UIApplicationInvalidInterfaceOrientation



Answer 4:

我发现从链接我的解决方案iOS7的iPad景观唯一的应用程序,使用的UIImagePickerController 。

它的工作对我来说就像一个魅力。

希望它可以帮助别人也。

感谢您的帮助的人。



Answer 5:

我继承了的UIImagePickerController,并覆盖牵引的方法来支持横向(或者你可以做一个类别):

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

- (BOOL)shouldAutorotate
{
    return YES;
}

而在支持的接口方向(新iPad)添加人像(下home键),风景(左home键),风景(右home键)。

在这里,必须添加的肖像(下home键)值,因为刚才的UIImagePickerController支持肖像模式而已,所以我们需要添加的肖像模式,否则会引发异常。



文章来源: Orientation issue in Landscape mode while opening camera in iOS 7 in iPhone