我有一个仅在某些部分支持横向的应用程序(照片库,视频等),并且所有功能在iOS 6上运行正常,没有任何问题,但是,在iOS 7中应用程序崩溃。
所以继承我的问题:
--> CRASH: **preferredInterfaceOrientationForPresentation must return a supported interface orientation!** 2013-11-06 10:18:06.220 ausopen-iphone-2014[57605:70b] Stack Trace: ( 0 CoreFoundation 0x03f665e4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x03ce38b6 objc_exception_throw + 44 2 CoreFoundation 0x03f663bb +[NSException raise:format:] + 139 3 UIKit 0x01366f1c -[UIViewController _preferredInterfaceOrientationForPresentationInWindow:fromInterfaceOrientation:]
+ 580
其他信息:
在我的info.plist中,我支持肖像和风景
在我的AppDelegate中,我实现了以下方法:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{}
在这个方法中,我指定如果第一个视图(HomeVC)显示它应该支持所有方向。
在这个方法中,我还指定如果第二个视图(PhotoVC)显示它也应该支持所有方向。
在我的第一个视图(HomeVC)中,我使用以下方法覆盖此方法,以便在显示视图时仅支持纵向模式:
- (BOOL)shouldAutorotate {
return YES;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
不确定iOS 7中有什么变化,因为一切都在iOS 6中运行良好。似乎在iOS 7中,一旦弹出横向视图,应用程序就不会自动旋转。
任何帮助将不胜感激..
答案 0 :(得分:14)
在IOS7中。如果你使用UINavigationController,旋转处理方式是不同的!
看看UINavigationController,可以看到它是UIViewController的子类,那就是在他上面列出了上面处理方法的轮换;所以我需要使用UINavigationController也做旋转处理,我的方法是将类别添加到UINavigationController,这样做。
在类别中。 M写道
-(BOOL)shouldAutorotate {
return [[self.viewControllers lastObject] shouldAutorotate];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
答案 1 :(得分:1)
你可以简单地使用它: -
-(void)rotateCameraView
{
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil];
}
//Mohit 18 Oct
- (void)deviceOrientationDidChange:(NSNotification *)notification {
//Obtaining the current device orientation
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
//Ignoring specific orientations
if (orientation == UIDeviceOrientationFaceUp || orientation == UIDeviceOrientationFaceDown || orientation == UIDeviceOrientationUnknown) {
return;
}
if ((UIDeviceOrientationIsPortrait(orientation) ||UIDeviceOrientationIsPortrait(orientation)) ||
(UIDeviceOrientationIsLandscape(orientation) || UIDeviceOrientationIsLandscape(orientation))) {
//still saving the current orientation
currentOrientation = orientation;
}
[self performSelector:@selector(orientationChangedMethod) withObject:nil afterDelay:0];
}
//Mohit 18 Oct
-(void)orientationChangedMethod
{
switch (currentOrientation) {
case UIDeviceOrientationPortrait:
}
}
//Note here current orientation is a UIDeviceOrientation currentOrientation; global variable.