我有一个应用程序,它仅在横向模式。 在我的应用我从我的观点一个打开相机。 这是很好的工作为我的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 ;
}
我以前也收到同样的问题。 我遵循的步骤。 请试试这个,让我知道你面临同样的问题。 复选标记
第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];
}
}
是否崩溃发生在启动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.
试试这个代码,它工作在我的旧应用程序。
-(BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
可能要检查这一点: 仅在景观应用的GameCenter认证抛出UIApplicationInvalidInterfaceOrientation
我发现从链接我的解决方案iOS7的iPad景观唯一的应用程序,使用的UIImagePickerController 。
它的工作对我来说就像一个魅力。
希望它可以帮助别人也。
感谢您的帮助的人。
我继承了的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