Ios7 需要一种在不旋转iOS设备的情况下强制UIInterfaceOrientation旋转的方法吗

Ios7 需要一种在不旋转iOS设备的情况下强制UIInterfaceOrientation旋转的方法吗,ios7,uiinterfaceorientation,Ios7,Uiinterfaceorientation,我需要知道是否有办法告诉iOS7设备在不旋转设备的情况下设置视图方向。以某种方式输入代码,触发设备调用告诉它以何种方式显示视图的代码 如果设备处于横向,并且在发生特定更改时保持横向,我希望强制更改以纵向显示视图,此时用户需要转动设备以正确查看。我将在下面解释原因 查看我的应用程序可能会让我的描述更清楚- 我有许多视图控制器(嵌入在NavigationController中),其中只有一个需要旋转到横向,然后仅在特定条件下旋转 StackOverflow的解决方案似乎是在UINavigationC

我需要知道是否有办法告诉iOS7设备在不旋转设备的情况下设置视图方向。以某种方式输入代码,触发设备调用告诉它以何种方式显示视图的代码

如果设备处于横向,并且在发生特定更改时保持横向,我希望强制更改以纵向显示视图,此时用户需要转动设备以正确查看。我将在下面解释原因

查看我的应用程序可能会让我的描述更清楚-

我有许多视图控制器(嵌入在NavigationController中),其中只有一个需要旋转到横向,然后仅在特定条件下旋转

StackOverflow的解决方案似乎是在UINavigationController上创建一个类别,赋予它shouldAutorotate和supportedInterfaceOrientations方法,然后在各个ViewController中使用这些方法来阻止或允许旋转

这对我很有用。。。。然而

在我希望旋转的单视图控制器上,我不希望它一直旋转

此视图控制器是DevisiteDetails控制器(如果您下载了应用程序,则需要在第一页上选择潜水站点,然后单击“+”以查看它)。它有一个UISegmentedController和4个子视图(3个表视图和1个其他UIView)。应用商店的当前版本运行良好,现在我已经解决了这个问题——但查看它可能会帮助您更好地理解我的问题)

在DevisiteDetailViewController上,UISegmentedController用于在4个子视图之间切换

所有子视图都用于输入关于同一潜水点的数据,但由于存在大量潜在数据,我将其分为逻辑卡盘,每个卡盘都是一个子视图-位置、数据(深度、洋流、可见性)、环境类型和注释

每个子视图的.hidden属性用于使它们出现和消失

我只希望第二个子视图旋转(数据视图-它有一些滑块,如果在横向视图中更容易使用)

限制这种旋转很容易——我就是这样做到的

- (NSUInteger)supportedInterfaceOrientations{
if (self.dsDataRangeSlidingTV.hidden) {
return UIInterfaceOrientationMaskPortrait;
}
return UIInterfaceOrientationMaskAllButUpsideDown;
}
现在,当显示数据表视图时,视图将仅旋转到横向

但是,在横向视图中,如果我使用UISegmentedController选择了不同的子视图,那么它们显然也会显示在横向视图中,因为iOS设备没有进行旋转。这就是我试图避免的情况

旋转iOS设备将按预期将这些视图返回到纵向视图,但当我使用UISegmentedController从数据子视图切换到另一个子视图时,我需要触发设备重新评估其显示,而我不知道如何进行触发


任何建议都收到了。

这里有一个适合我的解决方法

我在方法的末尾添加了以下几行代码,以响应正在点击的UISegmentedControl

UIViewController *aDummyController = [[UIViewController alloc]init];
[self presentViewController:aDummyController animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
添加新的viewController并将其弹出会触发旋转。这是实现我想要的东西的一种笨拙的方式

我在这篇文章中找到了解决办法

乔希虽然不是公认的答案,但目前已有99人投了赞成票

我仍然有一个缺陷,如果我在横向(尽管显示器是纵向视图)中握住设备,同时在屏幕上进入DeviiteDetailsController,那么DeviiteDetailsController显示器的初始视图将在横向

为了解决这个问题,我在DevisiteDetailsController上创建了一个名为NotThistTime的Bool属性,并在调用它的viewController上的prepareFor Segue中将其设置为true

然后我将SupportedInterface方向更改为

- (NSUInteger)supportedInterfaceOrientations

{//   DLog(@"Running %@ '%@'", self.class, NSStringFromSelector(_cmd));

if (self.notThisTime){
    return UIInterfaceOrientationMaskPortrait;
}
if (!self.dsDataRangeSlidingTV.hidden) {

return UIInterfaceOrientationMaskAllButUpsideDown;
}

然后在ViewDidLoad方法的末尾,我添加了

self.notThisTime = NO; 
我仍然希望听到任何人对如何更好地处理这一问题提出建议。按下并弹出一个虚拟视图,让iPhone进行方向检查,这似乎是一个解决方案,应该只作为标准方法调用提供

最后一个注意事项是——iOS模拟器不喜欢这样——你需要在设备上检查——它有时试图在横向绘制iPhone容器,而屏幕是垂直绘制的——但是它在iPhone上工作得很好