在 iOS 8 中的纵向锁定应用程序中将单个视图旋转为横向

Rotate a single view to landscape in a portrait locked Application in iOS 8

我有一个在视图控制器中使用纵向模式的应用程序,除了一个页面需要仅横向(横向左侧或横向右侧)。我怎样才能做到这一点? 我尝试了多种解决方案,说为导航栏设置方向模式,应用程序将转动,但不幸的是,这对我不起作用。我也试过手动旋转视图,它起作用了,但是当我单击文本字段在其中写东西时,键盘出现在纵向模式而不是横向模式。

NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeRight];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];

上面的代码对我有用,但只有当我允许应用程序在横向和纵向旋转时才有效,但这不是我想要的,因为这样所有页面都可以从纵向变为横向。

编辑:

我的情况是我被分配了一个已经完成的项目。制作此应用程序的人一直在使用 STNavigation Manager(我不太确定那是什么)而不是 self.navigationController 推送和弹出作为东西。所以 shouldAutoRotate 和这些代表在我的应用程序中不起作用。其次,他还禁用了导航栏并创建了自己的导航栏。

使用UIView的变换属性旋转:

-(void)viewWillAppear:(BOOL)animated
{
CGAffineTransform newTransform = CGAffineTransformMake(0.0,1.0,-1.0,0.0,0.0,0.0);         
self.view.transform = newTransform;

}

如果您在应用程序中启用您需要的横向模式,您可以使用您正在使用的代码强制应用程序进入您想要的横向模式,然后在您 return您要在哪个屏幕上竖屏。

我发现最好的方法是创建一个 UINavigationController 的子类,它不允许通过

进行旋转
-(BOOL)shouldAutoRotate

然后在一个视图中,我希望景观在 VC 级别 return 上实现相同的方法。