Objective c 在iOS中手动更新界面方向

Objective c 在iOS中手动更新界面方向,objective-c,ios,cocoa-touch,orientation,Objective C,Ios,Cocoa Touch,Orientation,我的iOS应用程序支持除上下外的所有方向。 但在应用程序中,我有一个带有首选项的视图,我希望它只能以纵向显示。因此,每当显示此视图时,它都会在需要时旋转,以处于纵向模式。这意味着用户也将在纵向模式下旋转设备,以设置首选项,然后在关闭此视图界面后,现在应具有纵向方向。 问题是,在“首选项”视图被隐藏后,界面将保持横向,因为我会在显示该视图后阻止自动旋转。 因此,隐藏视图后,我想手动将界面更新为当前设备方向。我怎么做 此代码在superview上长按手势后从选项ViewController调用。您

我的iOS应用程序支持除上下外的所有方向。 但在应用程序中,我有一个带有首选项的视图,我希望它只能以纵向显示。因此,每当显示此视图时,它都会在需要时旋转,以处于纵向模式。这意味着用户也将在纵向模式下旋转设备,以设置首选项,然后在关闭此视图界面后,现在应具有纵向方向。 问题是,在“首选项”视图被隐藏后,界面将保持横向,因为我会在显示该视图后阻止自动旋转。 因此,隐藏视图后,我想手动将界面更新为当前设备方向。我怎么做



此代码在superview上长按手势后从选项ViewController调用。

您所要做的就是将以下内容添加到用于首选项的视图控制器中

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

调用此解决方案对我很有用:

-(void)forceOrientationUpdate {
    UIViewController *c = [[UIViewController alloc]init];
    [self presentModalViewController:c animated:NO];
    [self dismissModalViewControllerAnimated:NO];
    [c release];
}

基于Marek R提出的解决方案,我创建了一个UIViewController扩展来强制更新控制器的方向。由于新版本的iOS,他的解决方案不再有效。我在这里发布了强制方向更新的解决方案(以便考虑控制器支持的方向方法),而不会产生副作用。希望能有帮助

UIViewController*vc=[[UIViewController alloc]init];
[[vc视图]setBackgroundColor:[UIColor clearColor]];
[vc setModalPresentationStyle:(UIModalPresentationOverFullScreen)];
[自我呈现视图控制器:vc动画:未完成:^{
dispatch\u async(dispatch\u get\u main\u queue()^{
[vc DismissViewControllerInitiated:是完成:完成];
});
}];

我已经试过了。但它似乎不起作用,因为此视图是主视图的子视图,它支持所有方向。所以,如果我的主视图将自动旋转,首选项视图也将旋转。或者我误解了什么?所以这个视图是self中的一个子视图。viewcontroller中的view?是否只希望此特定子视图旋转,而其他视图保持静止?这就是您想要的吗?不,我有一个由MainViewController控制的MainView和一个由OptionViewController控制的作为MainView子视图的OptionView。我希望主视图自动旋转,但OptionView在纵向模式下保持静态。您能发布代码,显示您如何调用options视图吗?我不太明白您所说的“调用options视图”是什么意思。你是说我怎么才能出现?我不明白你到底对哪种代码感兴趣。我在IB中设置了视图。它是相应选项ViewController的
视图
属性,我从中访问视图。
-(void)forceOrientationUpdate {
    UIViewController *c = [[UIViewController alloc]init];
    [self presentModalViewController:c animated:NO];
    [self dismissModalViewControllerAnimated:NO];
    [c release];
}