2012-06-13 36 views
1

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


self.view.hidden=NO; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.3]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
self.view.alpha=1.0; 
[UIView commitAnimations]; 

此代码是从OptionsViewController上它的父一LongPressGesture后调用。

回答

0

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

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

我已经试过了。但它似乎并不奏效,因为这个观点是主视图的子视图,它支持所有的方向。所以如果我的主视图会自动旋转,首选视图也会旋转。或者我误解了一些东西? – BartoNaz

+1

所以这个视图是在你的viewcontroller的self.view中的子视图?你只想让这个特定的子视图旋转,而其他视图保持静态?那是你要的吗? –

+0

不,我有一个由MainViewController控制的MainView和一个OptionsView,它是MainView的子视图,由OptionsViewController控制。我希望MainView自动旋转,但OptionsView在纵向模式下保持静态。 – BartoNaz

0

调用此替代方法适用于我:

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

我创建了一个UIViewController扩展到强制控制器的取向更新的基础上,由马雷克R.提出由于iOS的新版本的解决方案,他的解决方案不再有效。我在这里发布我的解决方案,强制进行方向更新(以便考虑到支持的控制器方向方法),而不会有侧视觉效果。希望能帮助到你。

UIViewController *vc = [[UIViewController alloc]init]; 
[[vc view] setBackgroundColor:[UIColor clearColor]]; 
[vc setModalPresentationStyle:(UIModalPresentationOverFullScreen)]; 
[self presentViewController:vc animated:NO completion:^{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [vc dismissViewControllerAnimated:YES completion:completion]; 
    }); 
}];